我使用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:
$ python
Python 2.7.5 |Anaconda 1.8.0 (x86_64)| (default, Oct 24 2013, 07:02:20)
[GCC 4.0.1 (Apple Inc. build 5493)] on darwin
并且$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 python 2.7.5时,它仍然使用来自anaconda库的platforms.py
,导致正则表达式评估中的崩溃{ {3}}。我不关心在虚拟环境中使用哪个python版本。关于如何告诉虚拟环境内部python正确使用platforms.py
的任何建议?
谢谢!
答案 0 :(得分:7)
我在安装了Anaconda的Mac上遇到了同样的问题。我修复它的方法是搜索platform.py,然后修改以下内容(注释掉一行):
<强> ORIGINAL 强>
_sys_version_parser = re.compile(
r'([\w.+]+)\s*'
'\|[^|]*\|\s*' # version extra
'\(#?([^,]+),\s*([\w ]+),\s*([\w :]+)\)\s*'
'\[([^\]]+)\]?')
更改
_sys_version_parser = re.compile(
r'([\w.+]+)\s*'
#'\|[^|]*\|\s*' # version extra # Just comment this line out
'\(#?([^,]+),\s*([\w ]+),\s*([\w :]+)\)\s*'
'\[([^\]]+)\]?')
这是与virtualenv == 1.10.1和anaconda 1.9.2
答案 1 :(得分:3)
我最终做的解决方案是从正确的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
答案 2 :(得分:2)
我制定的解决方案是补充virtualenv.py
,因此它不仅可以将Python二进制文件复制到新环境,还可以复制随附的libpythonX.Y.so
共享库文件。没有它们,微小的Anaconda Python二进制文件(看一下它 - 它的大小只有几千字节)链接系统libpython而不是Anaconda libpython,所以你有系统Python的版本字符串被Anaconda解析了#39; s变种platform.py
代码。
这是一个简短的shell脚本,可以修复virtualenv.py
;激活Anaconda环境后运行它并运行pip install virtualenv
以使virtualenv
工具可用于其中:
https://github.com/brandon-rhodes/homedir/blob/master/bin/%2Cfix-virtualenv-for-anaconda