Virtualenv 包升级和安装失败:无法导入名称消息

Virtualenv package upgrade and install fails: cannot import name Message

我尝试按照说明 here 在 vi​​rtualenv 中升级 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__)'

并重命名或删除它。