【问题标题】:Dealing with multiple Python versions and PIP?处理多个 Python 版本和 PIP?
【发布时间】:2011-02-18 05:51:00
【问题描述】:

有什么方法可以让pip 与多个版本的 Python 兼容吗?例如,我想使用 pip 将内容显式安装到我的站点 2.5 安装或我的站点 2.6 安装中。

例如,对于easy_install,我使用easy_install-2.{5,6}

而且,是的——我知道 virtualenv,但不——它不是解决这个特定问题的方法。

【问题讨论】:

  • @YiboYang 是否适用于 pip34pip35 之类的东西?
  • @JinSnow 应该,前提是pip3.x 实际管理您要安装包的python 版本(也许运行pip3.x -V 来查看)。或者使用@Hugo 的解决方案来更好地控制大量的python 版本。

标签: python pip


【解决方案1】:

/path/to/python2.{5,6} /path/to/pip install PackageName 不起作用?

要在尚未安装 pip 的任何 python 版本上工作,您需要下载 pip 并执行python*version* setup.py install。例如python3.3 setup.py install。这解决了 cmets 中的导入错误。 (正如@hbdgaf 所建议的)

【讨论】:

  • 要在 python 3 上运行,您需要下载 pip 并执行“python3 setup.py install”。我个人觉得这个解决方案不是很好。首先,我什至不知道 pip 命令不是二进制文件。这不是对@bwinton 的批评,我只是很惊讶没有更好的方法来做到这一点。
  • "ImportError: 没有名为 pkg_resources 的模块"
  • 我很困惑 importerror 的问题比它上面的同一条评论的解决方案得到了更多的提升。
  • 另外,/path/to/pip 是这样的:python2.{5,6}/Scripts/pip2.{5,6}
  • 要调用python模块你应该使用python2.7 -m pip install PackageName
【解决方案2】:

current recommendation 是使用python -m pip,其中python 是您要使用的 Python 版本。这是建议,因为它适用于所有版本的 Python,以及所有形式的 virtualenv。例如:

# The system default python:
$ python -m pip install fish

# A virtualenv's python:
$ .env/bin/python -m pip install fish

# A specific version of python:
$ python-3.6 -m pip install fish

上一个答案,留给后人:

从 0.8 版本开始,Pip 支持pip-{version}。可以和easy_install-{version}一样使用:

$ pip-2.5 install myfoopackage
$ pip-2.6 install otherpackage
$ pip-2.7 install mybarpackage

编辑:在 1.5 版中,pip 将其架构更改为使用 pipVERSION 而不是 pip-VERSION。如果您有pip >= 1.5,则应使用以下内容:

$ pip2.6 install otherpackage
$ pip2.7 install mybarpackage

查看https://github.com/pypa/pip/pull/1053了解更多详情


参考资料:

【讨论】:

  • 不起作用。虽然最新版的 pip 安装了 pip-2.6 脚本,但也懒得安装 pip-2.5 脚本了。
  • 你需要更新你的python2.5 pip版本...它只会在你使用pip的python下创建pip-{PYVERSION}。
  • 这是不正确的。我在 Ubuntu 上使用 Python2.7 运行 pip 1.2.1,并且没有替代 pip 版本。
  • @rodling: 可能你没有通过pip/easy_installget-pip.py 安装pip 或者你没有python2.7。如果你有python2.7,试试:pip install --upgrade pip,你应该有pippip-2.7
  • @J.C.Rocamonde:程序 pip 是根据环境变量 $PATH 选择的。如果要更改“默认” pip 程序,请重新排序 $PATH 环境变量。有关 $PATH 的更多详细信息,请搜索“路径环境变量 linux”之类的内容。
【解决方案3】:

显然easy_install 有多个版本 pip。这似乎是一个很大的混乱。无论如何,这就是我在 Ubuntu 12.10 上安装 Django for Python 2.7 所做的:

$ sudo easy_install-2.7 pip
Searching for pip
Best match: pip 1.1
Adding pip 1.1 to easy-install.pth file
Installing pip-2.7 script to /usr/local/bin

Using /usr/lib/python2.7/dist-packages
Processing dependencies for pip
Finished processing dependencies for pip

$ sudo pip-2.7 install django
Downloading/unpacking django
  Downloading Django-1.5.1.tar.gz (8.0Mb): 8.0Mb downloaded
  Running setup.py egg_info for package django

    warning: no previously-included files matching '__pycache__' found under directory '*'
    warning: no previously-included files matching '*.py[co]' found under directory '*'
Installing collected packages: django
  Running setup.py install for django
    changing mode of build/scripts-2.7/django-admin.py from 644 to 755

    warning: no previously-included files matching '__pycache__' found under directory '*'
    warning: no previously-included files matching '*.py[co]' found under directory '*'
    changing mode of /usr/local/bin/django-admin.py to 755
Successfully installed django
Cleaning up...

$ python
Python 2.7.3 (default, Sep 26 2012, 21:51:14) 
[GCC 4.7.2] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import django
>>> 

【讨论】:

    【解决方案4】:

    我默认安装了 python 2.6 (Amazon EC2 AMI),但我的应用程序需要 python2.7 和一些外部包。假设您已经安装了 python2.7 和默认 python(在我的例子中是 2.6)。以下是如何为非默认 python2.7 安装 pip 和包

    为你的 python 版本安装 pip:

    curl -O https://bootstrap.pypa.io/get-pip.py
    python27 get-pip.py
    

    使用特定的 pip 版本安装包:

    pip2.7 install mysql-connector-python --allow-external mysql-connector-python
    

    【讨论】:

    • 对 python 3.4 非常有用,如下:python3 get-pip.py 以及后来使用 pip 命令和pip34 install example
    • 谢谢。很有用。在两台不同的服务器上测试。
    • 这在我使用 'python2.7 get-pip.py' 而不是 'python27 get-pip.py' 时有效
    • 感觉粗略的人,但它对我在 Centos 5 上安装 pip2.6 很有用。
    • 当我尝试python2.6 get-pip.py时得到Could not find a version that satisfies the requirement pip (from versions: ) No matching distribution found for pip
    【解决方案5】:

    我自己最近遇到了这个问题,发现在我的也有 Python 2 的 Linux 系统上,我没有为 Python 3 获得正确的 pip。

    首先你必须确保你已经为你的python版本安装了pip:

    对于 Python 2:

    sudo apt-get install python-pip
    

    对于 Python 3:

    sudo apt-get install python3-pip
    

    然后要为一个版本的 Python 或另一个版本安装包,只需对 Python 2 使用以下命令:

    pip install <package>
    

    或者对于 Python 3:

    pip3 install <package>
    

    【讨论】:

      【解决方案6】:

      在 Windows 上,如果您选择在 Python 3 设置期间安装 pip 模块,则可以使用给定的 Python 版本通过Python launcherpy.exe 执行它。

      py -3 -m pip install packagename
      py -2 -m pip install packagename
      

      您可以更加具体并请求 Python 的确切子版本:

      py -3.6 -m pip install packagename
      

      要获取通过启动器可用的所有已安装 Python 版本的列表,请运行:

      py --list
      

      或者,您可以直接启动所需的 Python 可执行文件:

      C:/path/to/specific/python.exe -m pip install packagename
      

      【讨论】:

      • 在 Windows 上同时安装了 2.7 和 3.5,这可以立即使用
      • 有没有办法在Windows上拥有python2python3pip2pip3
      • 这在 Windows 上对我有用。安装了 3 个,然后安装了 2 个
      • 谢谢,这对我有用!无法相信这有多困难。 (没有这些或变体 python-3.7 -m pip installpython-3.7 -m pip installpython3.7 -m pip install为我工作...)
      • py -3.6 -m pip install packagename 不起作用。我得到“未知选项:-3”选项 jeppoo1 也没有尝试过。
      【解决方案7】:

      它以这种方式在 Windows 中为我工作:

      1. 我把python文件python.py和pythonw.exe的名字改成了python3.py pythonw3.py

      2. 然后我只是在提示符下运行了这个命令:

        python3 -m pip install package

      【讨论】:

      • 只是为了让其他人弄清楚如何在 mac 上使用 pip 在 python3 中安装包,这个命令就是你安装包的方式。我花了几个小时搜索,终于找到了!
      【解决方案8】:

      其他答案显示如何将 pip 与 2.X 和 3.X Python 一起使用,但没有显示如何处理多个 Python 发行版(例如原始 Python 和 Anaconda Python)的情况 .

      我总共有 3 个 Python 版本:原始 Python 2.7 和 Python 3.5 和 Anaconda Python 3.5。

      以下是我如何将软件包安装到:

      1. 原版Python 3.5

        /usr/bin/python3 -m pip install python-daemon
        
      2. 原版Python 2.7

        /usr/bin/python -m pip install python-daemon
        
      3. Anaconda Python 3.5

        python3 -m pip install python-daemon
        

        pip3 install python-daemon
        

        更简单,因为 Anaconda 在用户环境中覆盖了原始 Python 二进制文件。

        当然,在anaconda中安装应该使用conda命令,这只是一个例子。


      另外,请确保为特定的 python 安装了 pip。您可能需要手动安装 pip。这适用于 Ubuntu 16.04:

      sudo apt-get install python-pip 
      

      sudo apt-get install python3-pip
      

      【讨论】:

      • 这里关于 Anaconda 的建议并不准确......它不会“覆盖”任何东西。它在您的系统上将 Anaconda 版本作为默认设置这一事实只是您的特定配置、您如何安装每个解释器以及您的环境的路径顺序的副作用......这些会因其他人而异。
      • @CoreyGoldberg 我同意,这是我安装 Ubuntu 16.04 时的默认设置
      • 你先生,是男人。在围绕这个问题的所有完全无用的解释中,这是唯一对我有意义的解释。是时候给这些命令起别名并继续我的生活了!谢谢。
      • 这在 ubuntu 上非常令人困惑,python3 pip 安装为 pip 命令,python 3.6 安装为 python3。 python2.7作为python命令安装,pip作为pip2安装。
      【解决方案9】:

      上下文:Archlinux

      行动:
      安装python2-pip:
      sudo pacman -S python2-pip

      你现在有 pip2.7:
      sudo pip2.7 install boto

      测试(在我的情况下,我需要'boto'):
      运行以下命令:

      python2
      import boto
      

      成功:没有错误。

      退出:Ctrl+D

      【讨论】:

        【解决方案10】:

        从这里:https://docs.python.org/3/installing/

        这里是如何安装同时安装的各种版本的软件包linux、mac、posix

        python2   -m pip install SomePackage  # default Python 2
        python2.7 -m pip install SomePackage  # specifically Python 2.7
        python3   -m pip install SomePackage  # default Python 3
        python3.4 -m pip install SomePackage  # specifically Python 3.4
        python3.5 -m pip install SomePackage  # specifically Python 3.5
        python3.6 -m pip install SomePackage  # specifically Python 3.6
        

        Windows 上,将 py Python 启动器与 -m 开关结合使用:

        py -2   -m pip install SomePackage  # default Python 2
        py -2.7 -m pip install SomePackage  # specifically Python 2.7
        py -3   -m pip install SomePackage  # default Python 3
        py -3.4 -m pip install SomePackage  # specifically Python 3.4
        

        【讨论】:

        • 也可以考虑签出:pipenv
        【解决方案11】:

        例如,如果您将其他版本(例如 3.5)设置为默认值并希望为 python 2.7 安装 pip:

        1. https://pypi.python.org/pypi/pip (tar) 下载 pip
        2. 解压 tar 文件
        3. cd 到文件目录
        4. sudo python2.7 setup.py install

        【讨论】:

          【解决方案12】:

          pip 也是一个 python 包。因此,将模块安装到特定 python 版本的最简单方法如下

           python2.7 /usr/bin/pip install foo
          

          python2.7 -m pip install foo
          

          【讨论】:

            【解决方案13】:

            这里的大多数答案都解决了这个问题,但我想补充一些关于在 CentOS 7 上的 /usr/local 中创建 python 的替代安装时一直让我感到困惑的东西。当我在那里安装时,它看起来像 pip 是工作,因为我可以使用pip2.7 install,它会安装模块。但是,我想不通的是为什么我新安装的 python 版本没有看到我正在安装的内容。

            原来在 CentOS 7 中,/usr/bin 文件夹中已经有一个 python2.7 和一个 pip2.7。要为您的新 python 发行版安装 pip,您需要专门告诉 sudo 转到 /usr/local/bin

            sudo /usr/local/bin/python2.7 -m ensurepip
            

            这应该会在您的/usr/local/bin 文件夹中安装 pip2.7 以及您的 python 版本。诀窍是,当您要安装模块时,您要么需要修改 sudo $PATH 变量以包含 /usr/local/bin 要么需要执行

            sudo /usr/local/bin/pip2.7 install <module>
            

            如果你想安装一个新模块。我花了很长时间才想起sudo 并没有立即看到/usr/local/bin

            【讨论】:

              【解决方案14】:

              您可以转到例如 C:\Python2.7\Scripts,然后从该路径运行 cmd。之后你可以运行 pip2.7 install yourpackage...

              这将为该版本的 Python 安装包。

              【讨论】:

                【解决方案15】:

                在 Linux、Mac OS X 和其他 POSIX 系统上,结合使用版本化 Python 命令和 -m 开关来运行 pip 的相应副本:

                python2.7 -m pip install SomePackage
                python3.4 -m pip install SomePackage
                

                (也可以使用适当版本的 pip 命令)

                在 Windows 上,将py Python 启动器与-m 开关结合使用:

                py -2.7 -m pip install SomePackage  # specifically Python 2.7
                py -3.4 -m pip install SomePackage  # specifically Python 3.4
                

                如果您收到py -3.4 的错误,请尝试:

                pip install SomePackage
                

                【讨论】:

                  【解决方案16】:

                  这是我对这个问题的看法。适用于 Python3。主要特点是:

                  • 每个 Python 版本都是从源代码编译的
                  • 所有版本都在本地安装
                  • 不会以任何方式破坏系统的默认 Python 安装
                  • 每个 Python 版本都使用 virtualenv 隔离

                  先决条件:如果您正在使用一些没有安装额外草皮的准系统瘦客户端,您应该首先运行它(至少在 ubuntu 18.04 中,为方便起见添加了额外的软件包):

                  sudo apt-get update
                  sudo apt-get install software-properties-common
                  sudo apt-add-repository universe
                  sudo apt-get update
                  sudo apt-get install -y build-essential cmake
                  
                  sudo apt-get install -y zlib1g zlib1g-dev libsqlite3-dev \
                  openssl libssl-dev libffi-dev unzip pciutils net-tools \
                  libblas-dev gfortran libblas3 
                  

                  步骤如下:

                  1. 如果您以其他方式安装了多个额外的 python 版本,请将它们删除,例如,删除 $HOME/.local/lib/python3.x 等(也是全局安装的那些)。不过不要碰你系统的默认 python3 版本。

                  2. 不同python版本的下载源码如下目录结构:

                     $HOME/
                         python_versions/ : download Python-*.tgz packages here and "tar xvf" them.  You'll get directories like this:
                           Python-3.4.8/
                           Python-3.6.5/
                           Python-3.x.y/
                           ...
                    
                  3. 在每个“Python-3.x.y/”目录中,执行以下操作(请不要在任何步骤中使用“sudo”!):

                     mkdir root
                     ./configure --prefix=$PWD/root 
                     make -j 2
                     make install
                     virtualenv --no-site-packages -p root/bin/python3.x env
                    
                  4. 在“python_versions/”创建这样的文件:

                     env_python3x.bash:
                    
                     #!/bin/bash
                     echo "type deactivate to exit"
                     source $HOME/python_versions/Python-3.x.y/env/bin/activate
                    
                  5. 现在,只要您想选择 python3.x,就去做

                     source $HOME/python_versions/env_python3x.bash
                    

                  进入虚拟环境

                  1. 在 virtualenv 中,安装你最喜欢的 python 包

                     pip install --upgrade package_name
                    
                  2. 要退出 virtualenv 和 python 版本,只需输入“deactivate”

                  更新

                  --no-site-packages 似乎已被弃用。有一个简单的解决方法:激活 virtualenv 后,只需将 HOME env 变量指向实际主目录以外的其他位置,即:

                  export HOME=some/where/else
                  

                  一般来说,一个不错的方法是:

                  • 创建虚拟环境
                  • 激活虚拟环境
                  • 如果您想将现有库“回收”到您的 virtualenv,请将它们从现有安装软链接,即 ln -s $HOME/.local/lib/python3.6/site-packages/numpy $PWD/venv/lib/python3.6/site-packages/
                  • export PYTHONPATH=, export HOME=/some/other/dir

                  现在您应该拥有自定义隔离的 virtualenv。

                  更新 2 / SUDO

                  不想强制 sudo 使用你的 virtualenv?

                  Defaults        secure_path="/home/USENAME/Python-3.x.y/env/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/snap/bin"
                  Defaults        env_keep += "VIRTUAL_ENV"
                  Defaults        env_keep += "PYTHONPATH"
                  

                  现在尝试“sudo python3 --version”,魔法应该会发生

                  更新 3 / DOCKER

                  在你的 docker 中启用 virtualenv(当然,你已经在你的 docker 镜像中构建了它):

                  ENV VIRTUAL_ENV=/home/USER/Python-3.x.y/env
                  ENV PYTHONPATH=
                  ENV PATH="$VIRTUAL_ENV/bin:$PATH"
                  

                  【讨论】:

                    【解决方案17】:

                    这可能是完全错误的做法(我是python菜鸟),但我只是进去编辑了pip文件

                    #!/usr/bin/env python3 <-- I changed this line.
                    
                    # -*- coding: utf-8 -*-
                    import re
                    import sys
                    
                    from pip._internal import main
                    
                    if __name__ == '__main__':
                        sys.argv[0] = re.sub(r'(-script\.pyw?|\.exe)?$', '', sys.argv[0])
                        sys.exit(main())
                    

                    【讨论】:

                      【解决方案18】:

                      安装多个版本的 Python 和各自的包。

                      同一台 Windows 机器上的 Python 版本:2.7、3.4 和 3.6

                      安装所有 3 个版本的 Python

                      • 使用以下路径安装了 Python 2.7、3.4 和 3.6

                      所有 3 个 Python 版本的路径

                      • 确保 PATH 变量(在系统变量中)包含以下路径 - C:\Python27\;C:\Python27\Scripts;C:\Python34\;C:\Python34\Scripts;C:\Python36\; C:\Python36\脚本\;

                      重命名版本的可执行文件

                      • 将 C:\Python36 和 C:\Python34 中的 python 可执行文件名分别更改为 python36 和 python34。

                      检查所有版本的命令提示符:

                      为每个版本单独安装软件包

                      【讨论】:

                        【解决方案19】:

                        专门针对 Windows: \path\to\python.exe -m pip install PackageName 有效。

                        【讨论】:

                        • 运气不好。
                        【解决方案20】:

                        如果您有多个版本以及多个架构(32 位、64 位),则需要在版本末尾添加 -32 或 -64。

                        对于 Windows,转到 cmd 并键入 py --list 它将生成您已安装的版本。该列表将如下所示:

                        Installed Pythons found by py Launcher for Windows
                         -3.7-64 *
                         -3.7-32
                         -3.6-32
                        

                        以完整的命令为例:

                        py -3.6-32 -m pip install (package)
                        

                        如果您想更深入地了解,要在特定版本的 python 上安装特定版本的包,请在包后使用 ==(version)。例如,

                        py -3.6-32 -m pip install opencv-python==4.1.0.25
                        

                        【讨论】:

                          【解决方案21】:

                          对于搅拌机:

                          /usr/bin $ python3.7 -m pip install irc
                          

                          【讨论】:

                            【解决方案22】:

                            如果您同时安装了python3.6python3.7,并且希望默认使用pippython3.7,您应该这样做:

                            首先确保为python3.7 安装了pip

                            python3.7 -m pip install -U pip
                            

                            现在pip3.7 必须可用,所以我们编辑.bashrc

                            nano ~/.bashrc
                            

                            添加下面一行

                            alias pip=pip3.7
                            

                            为了使更改在 shell 中生效类型:

                            source ~/.bashrc
                            

                            现在如果你输入:

                            pip --version
                            

                            你应该得到:

                            来自 /usr/local/lib/python3.7/dist-packages/pip (python 3.7) 的 pip 20.1.1

                            这意味着,如果你使用,例如:

                            pip install <package>
                            

                            它将为python3.7安装&lt;package&gt;

                            【讨论】:

                            • 忘记pip 脚本,它们不可靠。就用path/to/pythonX.Y -m pip,更安全。
                            • 从来没有遇到过问题。所以我看不出有什么理由忘记它。而且我认为这不会使我的回答“无用”
                            • /usr/bin/python3.8: No module named pip
                            • @EvanZamir 你可能还没有为 python3.8 安装 pip。请在*上查看这个问题*.com/questions/61717006/pip-for-python-3-8
                            【解决方案23】:

                            另一种可能的方法是使用 conda 和 pip。有时您可能只想使用其中一个,但如果您确实需要设置特定版本的 python,我将两者结合起来。

                            1. 我用我想要的 python 创建了一个起始 conda 环境。如这里https://docs.conda.io/projects/conda/en/latest/user-guide/tasks/manage-environments.html。或者,您可以仅使用 conda 设置整个环境。

                              conda create -n myenv python=3.6.4

                            2. 然后用你喜欢的 python 激活你的环境。此命令可能会因操作系统而异。

                              source activae myenv

                            3. 现在你的 python 处于活动状态,那么你可以继续使用 conda,但如果你需要/想要使用 pip:

                              python -m pip -r requirements.txt

                            这里有一个可能的方法。

                            【讨论】:

                              【解决方案24】:

                              您可以使用以下命令之一:

                              pip2 install SomePackage
                              pip3 install SomePackage
                              

                              python2 -m pip install SomePackage  
                              python3 -m pip install SomePackage 
                              

                              当然,请确保您安装了正确版本的 pip

                              sudo apt-get install python-pip
                              sudo apt-get install python3-pip
                              

                              我自己没有使用过这些命令,但是上面的一些答案建议使用它们来准确指定您要使用的 python 版本

                              pip-2.7 install SomePackage
                              python-3.6 -m pip install SomePackage
                              

                              【讨论】:

                                【解决方案25】:

                                对于 python 3 和 Windows 操作系统,我总是使用这种语法来安装不同版本的包:

                                首先我总是使用 Git Bash 命令提示符。

                                这里是安装 urllib 包的示例。

                                默认 Python 版本:(普通的 pip 命令)

                                pip install urllib3
                                

                                对于其他版本

                                py -3.8 -m pip install urllib3
                                

                                py => 用于 python

                                -3.8 => 用于版本(我使用的是 3.8.7 版本)但 如果您使用的是 3.7.7 版本,它将是“-3.7”

                                -m : 只是因为或为了修改

                                pip install urllib3 : 普通的 pip 命令

                                【讨论】:

                                  最近更新 更多