pip在virtual en中执行错误的python库版本

2024-10-01 11:24:17 发布

您现在位置:Python中文网/ 问答频道 /正文

我用virtualenvwrapper创建一个虚拟环境,然后尝试用pip在其中安装django。但是,由于python版本中的冲突,我一直得到一个错误。在

$ mkvirtualenv env
$ workon env
$ pip install django
Downloading/unpacking django
Cleaning up...
Exception:
Traceback (most recent call last):
  File "/Users/mingot/virtualenvs/env/lib/python2.7/site-packages/pip/basecommand.py", line 134, in main
    status = self.run(options, args)
  File "/Users/mingot/virtualenvs/env/lib/python2.7/site-packages/pip/commands/install.py", line 236, in run
    requirement_set.prepare_files(finder, force_root_egg_info=self.bundle, bundle=self.bundle)
  File "/Users/mingot/virtualenvs/env/lib/python2.7/site-packages/pip/req.py", line 1085, in prepare_files
    url = finder.find_requirement(req_to_install, upgrade=self.upgrade)
  File "/Users/mingot/virtualenvs/env/lib/python2.7/site-packages/pip/index.py", line 201, in find_requirement
    page = self._get_page(main_index_url, req)
  File "/Users/mingot/virtualenvs/env/lib/python2.7/site-packages/pip/index.py", line 554, in _get_page
    return HTMLPage.get_page(link, req, cache=self.cache)
  File "/Users/mingot/virtualenvs/env/lib/python2.7/site-packages/pip/index.py", line 671, in get_page
    resp = urlopen(url)
  File "/Users/mingot/virtualenvs/env/lib/python2.7/site-packages/pip/download.py", line 176, in __call__
    response = self.get_opener(scheme=scheme).open(url)
  File "/Users/mingot/virtualenvs/env/lib/python2.7/site-packages/pip/download.py", line 238, in get_opener
    headers.append(("User-agent", build_user_agent()))
  File "/Users/mingot/virtualenvs/env/lib/python2.7/site-packages/pip/download.py", line 35, in build_user_agent
    _implementation = platform.python_implementation()
  File "/Users/mingot/soft/anaconda/lib/python2.7/platform.py", line 1486, in python_implementation
    return _sys_version()[0]
  File "/Users/mingot/soft/anaconda/lib/python2.7/platform.py", line 1451, in _sys_version
    repr(sys_version))
ValueError: failed to parse CPython sys.version: '2.7.5 (default, Aug 25 2013, 00:04:04) \n[GCC 4.2.1 Compatible Apple LLVM 5.0 (clang-500.0.68)]'

在系统中,我运行的是python anaconda:

^{pr2}$

并且$PATH被设置为

/Users/mingot/soft/anaconda/bin:/usr/local/bin:/usr/local/sbin:/usr/bin:/bin:/usr/sbin:/sbin:/usr/texbin:/opt/X11/bin

在虚拟环境中,python版本是:

(env)$ python
Python 2.7.5 (default, Aug 25 2013, 00:04:04) 
[GCC 4.2.1 Compatible Apple LLVM 5.0 (clang-500.0.68)] on darwin

以及$PATH

/Users/mingot/virtualenvs/env/bin:/Users/mingot/soft/anaconda/bin:/usr/local/bin:/usr/local/sbin:/usr/bin:/bin:/usr/sbin:/sbin:/usr/texbin:/opt/X11/bin

我知道问题是,在虚拟环境中,当执行非anaconda python2.7.5时,它仍然使用anaconda库中的platforms.py,导致正则表达式的求值崩溃,如建议的here。我不关心在虚拟环境中使用哪个python版本。关于如何告诉python在虚拟环境中使用正确的platforms.py有什么建议吗?在

谢谢!在


Tags: pipinpyselfenvbinlibpackages
3条回答

我想出的解决方案是补充virtualenv.py,这样它不仅可以通过Python二进制文件复制到新环境中,还可以复制附带的{}共享库文件。如果没有它们,小型的Anaconda Python二进制文件(看看它-它的大小只有几千字节)链接到系统libpython而不是Anaconda libpython,因此系统Python的版本字符串由Anaconda的变种platform.py代码解析。在

下面是一个简短的shell脚本,它将修复virtualenv.py;一旦您激活了您的Python环境并运行了pip install virtualenv以使virtualenv工具可用,请运行它:

https://github.com/brandon-rhodes/homedir/blob/master/bin/%2Cfix-virtualenv-for-anaconda

我最后要做的解决方案是从正确的python版本的库文件中创建一个指向虚拟环境库文件夹中platforms.py的符号链接。在

$ pwd
/Users/mingot/virtualenvs/env/lib/python2.7
$ ln -s /System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/platform.py platform.py

我在安装了Python的Mac电脑上也遇到了同样的问题。我所寻找的修复方法平台.py,然后修改以下内容(注释掉一行):

原版

_sys_version_parser = re.compile(
    r'([\w.+]+)\s*'
    '\|[^|]*\|\s*' # version extra
    '\(#?([^,]+),\s*([\w ]+),\s*([\w :]+)\)\s*'
    '\[([^\]]+)\]?')

更改为

^{pr2}$

这是因为virtualenv==1.10.1和anaconda 1.9.2

相关问题 更多 >