在python virtualenv中处理几个包版本

时间:2014-08-19 10:13:19

标签: python numpy virtualenv

我正在使用我没有root权限的计算服务器,所以为了能够安装我想要的任何库,我为python 2.6创建了virtualenv --system-site-packages

然后,在虚拟环境中,我安装了numpy版本1.8.2,因为系统numpy版本(1.3.0)太旧了,不符合我的要求:

  

numpy - 1.3.0 - 活跃开发(/usr/lib64/python2.6/site-packages)

     

numpy - 1.8.2 - 非活跃

我需要--system-site-packages选项,因为我正在使用一些我无法在虚拟环境中安装的系统库。但是,我无法告诉虚拟环境使用最新版本的numpy。

有谁知道如何在虚拟环境中选择版本1.8.2?我尝试了pkg_resources.require('numpy==1.8.2'),但我收到了错误:

  

pkg_resources.VersionConflict: (numpy 1.3.0 (/usr/lib64/python2.6/site-packages), Requirement.parse('numpy==1.8.2'))

在查看系统的virt2/lib64/python2.6/site-packages文件夹之前,有没有办法告诉虚拟环境在虚拟/usr/lib64/python2.6/site-packages文件夹中查找库?

1 个答案:

答案 0 :(得分:0)

很可能你被issue #461咬了,而且目前(截至2014年8月)你无法升级任何系统继承的包,因为virtualenv的路径是在任何系统路径之后排序的在sys.path内。

你的解决方法是将(通常)最后一个sys-path条目移到上面的一个位置:

  • 使用python-code重新排序sys.path。例如,假设你的virtualenv site-packages的索引是最后一个,你必须确保以下代码运行在任何其他代码之前:

    import sys; sys.path.insert(0, sys.path.pop(-1))
    
  • 在执行python-interpreter之前类似地修改你的PYTHONPATH环境变量(参见question #10738919和)。