在virtualenv中的Pip版本

时间:2014-09-12 11:12:59

标签: python pip virtualenv

修改

问题是我安装了virtualenv==1.9这是一个破碎的版本。在您尝试调试任何内容之前,我建议您升级您的软件包; - )

原始

我遇到了pip的问题,并且(可能)openssl找到了here。简单的解决方法是降级到1.2.1。这有效但每次我使用virtualenv创建一个虚拟环境时,它会安装pip 1.5.6当前版本的pip。如果您安装djangocms-installer会发生同样的情况,因此每次我安装具有依赖关系的东西时,我都必须再次检查/设置pip版本。

有没有办法为virtualenv设置pip版本?

有没有办法设置'默认'每个程序安装程序的版本?

编辑:

OS:Mac os 10.7.5

Python:2.7

1 个答案:

答案 0 :(得分:6)

您遇到了问题,因为您降级了pip,但可能没有改变virtualenv安装默认pip的行为。你会如何调试这个?

  1. 查找正在调用的virtualenv脚本:

    [~] type -a virtualenv                                                                                                                           
    virtualenv is an alias for virtualenv --no-site-packages
    virtualenv is /usr/local/bin/virtualenv
    
  2. virtualenv获取一些信息:

    [~] head -n5 /usr/local/bin/virtualenv                                                                                                          
    #!/usr/local/opt/python/bin/python2.7
    # EASY-INSTALL-ENTRY-SCRIPT: 'virtualenv==1.11.5','console_scripts','virtualenv'
    __requires__ = 'virtualenv==1.11.5'
    import sys
    from pkg_resources import load_entry_point
    
  3. 现在我们知道virtualenv正在使用位于/usr/local/opt/python/bin的Python 2.7安装。

    1. 虽然您可以按照导入路径进行操作,但只需查看我们在#2中找到的目录就可以轻松查看将被调用的pip

      [~] ls /usr/local/opt/python/bin | grep pip                                                                                                          
      pip
      pip2
      pip2.7
      
    2. 并要求pip为您提供其版本:

          [~] /usr/local/opt/python/bin/pip -V                                                                                                        
          pip 1.5.6 from /usr/local/Cellar/python/2.7.8/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-        packages/pip-1.5.6-py2.7.egg (python 2.7)
      

      这就是原因!

      虽然我强烈建议修复您的SSL问题而不是降级pip,但您有以下选择:

      一个。在步骤3中找到的位置降级pip“全局”版本。如果查看/usr/local/bin/pip,您会看到以下内容:

          #!/usr/local/opt/python/bin/python2.7
          # EASY-INSTALL-ENTRY-SCRIPT: 'pip==1.5.6','console_scripts','pip'
          __requires__ = 'pip==1.5.6'
          import sys
          from pkg_resources import load_entry_point
      
          if __name__ == '__main__':
              sys.exit(
                  load_entry_point('pip==1.5.6', 'console_scripts', 'pip')()
              )
      

      如果您的Python路径中有pip的旧版本(例如),则应该可以替换__requires__load_entry_point(...行上的版本。

      B中。通过在创建virtualenv时指定pip标记,告诉--no-pip不要安装virtualenv。然后,您将负责将所需的pip文件放入虚拟环境binlib文件夹中。

      ℃。到处降级pip。当您安装旧版本的pip时,它最终会出现在错误的目录中,或者不是Python通过pip设置时找到的第一个virtualenv。小心调用virtualenv正在调用的相同Python解释器。

      (另请注意,你可以通过编辑activate脚本来“欺骗”虚拟环境,但你比我更勇敢。)