【问题标题】:ImportError while installing pip in virtualenv在 virtualenv 中安装 pip 时出现 ImportError
【发布时间】:2015-02-22 10:52:52
【问题描述】:

我有一台安装了 python2.6 的 rhel 机器。我一直在尝试替代安装 python2.7 并设置一个 virtualenv 以使用 2.7。我通过从源代码构建安装了python2.7,如下所示:

./configure --prefix=/usr/local --enable-unicode=ucs4 --enable-shared LDFLAGS="-Wl,-rpath /usr/local/lib" 
make && make altinstall

我已经在系统上安装了 virtualenv,所以我用它为 2.7 创建了一个 venv,如下所示:

virtualenv -p python2.7 --no-setuptools py27
. py27/bin/activate

现在,当我尝试在 venv 中安装 pip 时,它会失败,如下所示:

python get-pip.py
Traceback (most recent call last):
File "get-pip.py", line 19857, in <module>
  main()
File "get-pip.py", line 151, in main
  bootstrap(tmpdir=tmpdir)
File "get-pip.py", line 81, in bootstrap
  import pip
File "/tmp/tmpArPs31/pip.zip/pip/__init__.py", line 15, in <module>
File "/tmp/tmpArPs31/pip.zip/pip/vcs/mercurial.py", line 11, in <module>
File "/tmp/tmpArPs31/pip.zip/pip/download.py", line 29, in <module>
File "/tmp/tmpArPs31/pip.zip/pip/_vendor/__init__.py", line 81, in load_module
ImportError: No module named 'pip._vendor.requests'

无法弄清楚这里出了什么问题。请帮忙。

我已经安装了 python 2.7.8。

编辑:我最初尝试在没有 --no-setuptools 选项的情况下创建 virtualenv,但这给了我同样的错误:

virtualenv -p python2.7 py27_with_pip
Running virtualenv with interpreter /usr/local/bin/python2.7
New python executable in py27_with_pip/bin/python2.7
Also creating executable in py27_with_pip/bin/python
Installing setuptools, pip...
  Complete output from command /data1/home/sagraw1/...th_pip/bin/python2.7 -c "import sys, pip;     sys...d\"] + sys.argv[1:]))" setuptools pip:
  Traceback (most recent call last):
  File "<string>", line 1, in <module>
  File "/usr/lib/python2.6/site-packages/virtualenv-12.0-py2.6.egg/virtualenv_support/pip-6.0-    py2.py3-none-any.whl/pip/__init__.py", line 15, in <module>
  File "/usr/lib/python2.6/site-packages/virtualenv-12.0-py2.6.egg/virtualenv_support/pip-6.0-py2.py3-none-any.whl/pip/vcs/mercurial.py", line 11, in <module>
  File "/usr/lib/python2.6/site-packages/virtualenv-12.0-py2.6.egg/virtualenv_support/pip-6.0-py2.py3-none-any.whl/pip/download.py", line 29, in <module>
  File "/usr/lib/python2.6/site-packages/virtualenv-12.0-py2.6.egg/virtualenv_support/pip-6.0-py2.py3-none-any.whl/pip/_vendor/__init__.py", line 81, in load_module
ImportError: No module named 'pip._vendor.requests'
----------------------------------------
...Installing setuptools, pip...done.
Traceback (most recent call last):
  File "/usr/lib/python2.6/site-packages/virtualenv-12.0-py2.6.egg/virtualenv.py", line 2363, in <module>
    main()
  File "/usr/lib/python2.6/site-packages/virtualenv-12.0-py2.6.egg/virtualenv.py", line 848, in main
symlink=options.symlink)
  File "/usr/lib/python2.6/site-packages/virtualenv-12.0-py2.6.egg/virtualenv.py", line 1016, in create_environment
    install_wheel(to_install, py_executable, search_dirs)
  File "/usr/lib/python2.6/site-packages/virtualenv-12.0-py2.6.egg/virtualenv.py", line 984, in install_wheel
    'PIP_NO_INDEX': '1'
  File "/usr/lib/python2.6/site-packages/virtualenv-12.0-py2.6.egg/virtualenv.py", line 926, in call_subprocess
    % (cmd_desc, proc.returncode))
OSError: Command /data1/home/sagraw1/...th_pip/bin/python2.7 -c "import sys, pip; sys...d\"] + sys.argv[1:]))" setuptools pip failed with error code 1

我试过直接用python2.7安装pip,但还是不行:

python2.7 get-pip.py
Traceback (most recent call last):
  File "get-pip.py", line 19857, in <module>
    main()
  File "get-pip.py", line 151, in main
    bootstrap(tmpdir=tmpdir)
  File "get-pip.py", line 81, in bootstrap
    import pip
  File "/tmp/tmpPSVEkk/pip.zip/pip/__init__.py", line 15, in <module>
  File "/tmp/tmpPSVEkk/pip.zip/pip/vcs/mercurial.py", line 11, in <module>
  File "/tmp/tmpPSVEkk/pip.zip/pip/download.py", line 29, in <module>
  File "/tmp/tmpPSVEkk/pip.zip/pip/_vendor/__init__.py", line 81, in load_module
ImportError: No module named 'pip._vendor.requests'

【问题讨论】:

  • 如果您使用的是最新的 2.7 版本,应该使用python -m ensurepip 快速解决方法。
  • 直接调用python2.7怎么样,即:python2.7 get-pip.py
  • 您能详细说明一下,您为什么使用--no-setuptools?这将禁止安装setuptoolspip。这很公平,但你为什么要在之后尝试引导pip
  • @cel 我最初尝试过不使用 --no-setuptools ,但是在创建 virtualenv 时弹出了同样的错误。我已经用相关输出编辑了问题。
  • @user590028 也试过了,但它不起作用。请参阅问题中的编辑。

标签: python python-2.7 installation pip virtualenv


【解决方案1】:

我的情况与您的情况相似,但我最终找到了解决方法。至少在我的情况下,根本问题是当我编译 python 2.7.8 时,构建过程没有找到合适的 OpenSSL 库(因为它们没有安装在我的系统上)。 make 运行完成后,它显示了类似这样的摘要:

Failed to find the necessary bits to build these modules:
_bsddb             _curses            _curses_panel
_hashlib           _sqlite3           _ssl

这不会阻止 make install 工作,之后 Python 工作正常,除了它无法访问 https URL 和其他相关功能。您可以通过启动 python 然后输入

来判断这是否是您的情况

导入 ssl

如果您看到 ImportError,则说明缺少 ssl 模块。否则,您根本看不到任何消息。

我通过运行(以 root 身份)安装 OpenSSL 库来解决此问题:

yum install openssl-devel

完成后,我用 make 重建了 Python(现在 _ssl 没有被列为缺失),然后是 make install。在此之后,运行 get-pip.py 工作顺利。 希望这会有所帮助!

【讨论】:

  • 是的。我的问题和你的完全一样。我忽略了制作摘要并继续安装。尽管我最终按照上面 cmets 中 cel 的建议安装了 python 2.7.9,但我很确定一旦安装了 ssl 库,我的 2.7.8 也会正常工作。无论如何,将您的答案标记为问题的正确解决方案。
  • 对于 osx 用户,处理这个问题的方法是通过自制软件,简单的答案是...brew install openssl,然后是brew unlink python,然后是brew install python。它对我有用。
猜你喜欢
  • 2018-05-14
  • 1970-01-01
  • 2019-02-03
  • 1970-01-01
  • 2018-10-14
  • 2014-02-08
  • 1970-01-01
  • 1970-01-01
  • 2021-04-20
相关资源
最近更新 更多