Virtualenv 包升级和安装失败:无法导入名称消息
Virtualenv package upgrade and install fails: cannot import name Message
我尝试按照说明 here 在 virtualenv 中升级 pip。升级失败,因为系统python无法从邮件模块中导入名称Message。
(newsfeed)myhost:newsfeed admin$ pip install --upgrade pip
Traceback (most recent call last):
File "/Users/admin/newsfeed/newsfeed/bin/pip", line 7, in <module>
from pip import main
File "/Library/Python/2.7/site-packages/pip/__init__.py", line 9, in <module>
from pip.log import logger
File "/Library/Python/2.7/site-packages/pip/log.py", line 8, in <module>
from pip import backwardcompat
File "/Library/Python/2.7/site-packages/pip/backwardcompat/__init__.py", line 69, in <module>
from email import Message as emailmessage
ImportError: cannot import name Message
这个问题不仅与升级 pip 有关,还与在 virtualenv 中安装任何东西有关。当尝试安装新包时,会出现同样的错误。
在 virtualenv 外部的 python 终端中无法导入消息,但在 virtualenv 内部可以。
另外,在同一台机器上的不同virtualenv中,安装或升级包都没有错误。
为什么这个virtualenv不能升级或者安装包?
您的 pip 不在 venv 中,因此您可能无法像这样升级它。
这是因为您创建了一个使用系统包的 venv。删除 venv 并通过添加 --no-site-packages
作为参数重新创建它。
标准库的电子邮件包被您路径中名为 email(.py) 的包或模块隐藏(隐藏)。
通过调用找到包裹
python -c 'import email;print(email.__file__)'
并重命名或删除它。
我尝试按照说明 here 在 virtualenv 中升级 pip。升级失败,因为系统python无法从邮件模块中导入名称Message。
(newsfeed)myhost:newsfeed admin$ pip install --upgrade pip
Traceback (most recent call last):
File "/Users/admin/newsfeed/newsfeed/bin/pip", line 7, in <module>
from pip import main
File "/Library/Python/2.7/site-packages/pip/__init__.py", line 9, in <module>
from pip.log import logger
File "/Library/Python/2.7/site-packages/pip/log.py", line 8, in <module>
from pip import backwardcompat
File "/Library/Python/2.7/site-packages/pip/backwardcompat/__init__.py", line 69, in <module>
from email import Message as emailmessage
ImportError: cannot import name Message
这个问题不仅与升级 pip 有关,还与在 virtualenv 中安装任何东西有关。当尝试安装新包时,会出现同样的错误。
在 virtualenv 外部的 python 终端中无法导入消息,但在 virtualenv 内部可以。
另外,在同一台机器上的不同virtualenv中,安装或升级包都没有错误。
为什么这个virtualenv不能升级或者安装包?
您的 pip 不在 venv 中,因此您可能无法像这样升级它。
这是因为您创建了一个使用系统包的 venv。删除 venv 并通过添加 --no-site-packages
作为参数重新创建它。
标准库的电子邮件包被您路径中名为 email(.py) 的包或模块隐藏(隐藏)。
通过调用找到包裹
python -c 'import email;print(email.__file__)'
并重命名或删除它。