【问题标题】:pip executes the wrong python library versions inside virtual envpip 在虚拟环境中执行错误的 python 库版本
【发布时间】:2014-03-05 07:10:54
【问题描述】:

我用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,导致正则表达式的评估崩溃,如建议的here .我不在乎在虚拟环境中使用哪个 python 版本。关于如何告诉虚拟环境中的 python 使用正确的platforms.py 有什么建议吗?

谢谢!

【问题讨论】:

    标签: python virtualenv osx-mavericks virtualenvwrapper


    【解决方案1】:

    我在安装了 Anaconda 的 Mac 上遇到了同样的问题。我修复它的方法是搜索platform.py,然后修改以下内容(注释掉一行):

    原创

    _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

    【讨论】:

    • 谢谢威尔,我最终也会这样做!
    【解决方案2】:

    我最终做的解决方案是从正确的 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
    

    【讨论】:

      【解决方案3】:

      我制定的解决方案是补充virtualenv.py,这样它不仅可以将 Python 二进制文件复制到新环境,还可以复制随附的libpythonX.Y.so 共享库文件。没有它们,微小的 Anaconda Python 二进制文件(看看它——它只有几千字节大小)链接到系统 libpython 而不是 Anaconda libpython,所以你有系统 Python 的版本字符串被 Anaconda 的突变体 @987654324 解析@代码。

      这是一个简短的 shell 脚本,可以修复 virtualenv.py;激活 Anaconda 环境并运行 pip install virtualenv 后运行它,以使 virtualenv 工具在其中可用:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2016-06-20
        • 2021-01-05
        • 2020-05-22
        • 2016-11-02
        • 2019-04-21
        • 1970-01-01
        • 1970-01-01
        • 2023-01-08
        相关资源
        最近更新 更多