【问题标题】:pip install error within Python 3 virtualenvPython 3 virtualenv 中的 pip 安装错误
【发布时间】:2017-05-29 10:06:57
【问题描述】:

我创建了一个 Python 3 virtualenv,如下所示:

mkproject -p python3 flowerid

但是当我尝试使用 pip 安装任何东西时(在这个 virtualenv 中)我得到这个错误:

cd flowerid
pip install ipython
Traceback (most recent call last):
  File "/Users/nicolas/.virtualenvs/flowerid/bin/pip", line 11, in <module>
    load_entry_point('pip==9.0.1', 'console_scripts', 'pip')()
  File "/Users/nicolas/.virtualenvs/flowerid/lib/python3.6/site-packages/pkg_resources/__init__.py", line 560, in load_entry_point
    return get_distribution(dist).load_entry_point(group, name)
  File "/Users/nicolas/.virtualenvs/flowerid/lib/python3.6/site-packages/pkg_resources/__init__.py", line 2648, in load_entry_point
    return ep.load()
  File "/Users/nicolas/.virtualenvs/flowerid/lib/python3.6/site-packages/pkg_resources/__init__.py", line 2302, in load
    return self.resolve()
  File "/Users/nicolas/.virtualenvs/flowerid/lib/python3.6/site-packages/pkg_resources/__init__.py", line 2308, in resolve
    module = __import__(self.module_name, fromlist=['__name__'], level=0)
  File "/Users/nicolas/.virtualenvs/flowerid/lib/python3.6/site-packages/pip/__init__.py", line 28, in <module>
    from pip.vcs import git, mercurial, subversion, bazaar  # noqa
  File "/Users/nicolas/.virtualenvs/flowerid/lib/python3.6/site-packages/pip/vcs/subversion.py", line 9, in <module>
    from pip.index import Link
  File "/Users/nicolas/.virtualenvs/flowerid/lib/python3.6/site-packages/pip/index.py", line 31, in <module>
    from pip.wheel import Wheel, wheel_ext
  File "/Users/nicolas/.virtualenvs/flowerid/lib/python3.6/site-packages/pip/wheel.py", line 6, in <module>
    import compileall
  File "/usr/local/Cellar/python3/3.6.1/Frameworks/Python.framework/Versions/3.6/lib/python3.6/compileall.py", line 20, in <module>
    from concurrent.futures import ProcessPoolExecutor
  File "/Library/Python/2.7/site-packages/concurrent/futures/__init__.py", line 8, in <module>
    from concurrent.futures._base import (FIRST_COMPLETED,
  File "/Library/Python/2.7/site-packages/concurrent/futures/_base.py", line 357
    raise type(self._exception), self._exception, self._traceback
                               ^
SyntaxError: invalid syntax

在 'futures' 导入到“/Library/Python/2.7”之前,一切看起来都很正常。

我尝试在创建 virtualenv 时设置“--no-site-packages”,但这并没有改变任何东西(它不应该因为它是默认设置)。

我尝试使用 pip3 代替,同样的事情。

我尝试使用 easy_install pip 重新安装 pip(在 virtualenv 中),同样的事情......

还有其他想法吗?感谢您的帮助。

注意:我通常使用 Python 2.7 - 我确实在全球范围内安装了许多 Python 2.7 包 - 也许这就是造成冲突的原因?

我在 OSX El Capitan 上。

更新: 我的 virtualenv 似乎已激活 - 它开始使用我的 virtualenv 中的 pip 和 python。 'which python' 使用来自 virtualenv 的 python。

(flowerid) nicolas@~/venv_projects/flowerid$ which python
/Users/nicolas/.virtualenvs/flowerid/bin/python 

【问题讨论】:

  • 您是否忘记激活 virtualenv?
  • File "/Library/Python/2.7/site-packages.... 注意 2.7 Python 版本。
  • 你在运行pip时是否激活了virtualenv? which python 显示什么(或您使用的任何类似命令)?
  • 是的,我的 virtualenv 已激活,请参阅我的更新了解更多信息。

标签: python python-2.7 python-3.x virtualenv


【解决方案1】:

好的,我想通了。这是我的环境变量 PYTHONPATH - 把事情搞砸了 - 告诉 Python 查看 Python 2.7 库...我正在我的 .bashrc 中设置我的 PYTHONPATH。

所以解决方案是在激活时更改 PYTHONPATH 并在停用时设置回以前的设置(这让我有点难以置信,这不是默认设置......)

所以在/Users/nicolas/.virtualenvs/flowerid/bin/activate添加:

# Fix PYTHONPATH imports
export OLD_PYTHONPATH="$PYTHONPATH"
export PYTHONPATH="/Users/nicolas/.virtualenvs/flowerid/lib/python3.6/site-packages/"

/Users/nicolas/.virtualenvs/flowerid/bin/postdeactivate:

# Reset PYTHONPATH to previous state
export PYTHONPATH="$OLD_PYTHONPATH"

在这里我发现了问题所在:virtualenv --no-site-packages and pip still finding global packages?

以及解决方案: How do you set your pythonpath in an already-created virtualenv?

【讨论】:

    【解决方案2】:

    尝试替换 /Library/Python/2.7/site-packages/concurrent/futures/_base.py 中的行

        raise type(self._exception), self._exception, self._traceback
    

    有了这个

        raise Exception(self._exception), self._exception, self._traceback
    

    【讨论】:

      【解决方案3】:

      尝试使用 pip3 代替 pip 命令。由于您使用的是python 3。

      【讨论】:

      • 我试过了,同样的事情。它使用 Python3 启动,然后由于某种原因在导入期货时切换到 Python 2.7。
      • 你试过运行这个吗,python 文档中的例子:python3 -m pip install SomePackage
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-01-05
      • 2018-11-28
      • 1970-01-01
      • 1970-01-01
      • 2021-06-17
      • 2016-04-28
      相关资源
      最近更新 更多