处理多个Python版本和PIP?

Dealing with multiple Python versions and PIP?

有没有办法让pip与多个版本的Python一起运行? 例如,我想使用pip显式安装到我的站点2.5安装或我的站点2.6安装。

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

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


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

1
2
3
4
5
6
7
8
# 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}一样使用它:

1
2
3
$ pip-2.5 install myfoopackage
$ pip-2.6 install otherpackage
$ pip-2.7 install mybarpackage

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

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

有关详细信息,请查看https://github.com/pypa/pip/pull/1053

参考文献:

  • https://github.com/pypa/pip/issues/200
  • http://www.pip-installer.org/docs/pip/en/0.8.3/news.html#id4


在Windows中,您可以通过提及python版本来执行pip模块(您需要确保启动器在您的路径上)

py -3.4 -m pip install pyfora

py -2.7 -m pip install pyfora

或者,您可以像这样直接调用所需的python可执行文件:

/path/to/python.exe -m pip install pyfora


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

为了能够在任何没有安装pip的python版本上工作,你需要下载pip并执行python*version* setup.py install。例如python3.3 setup.py install。这解决了注释中的导入错误。 (正如@hbdgaf所建议的那样)


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

为你的python版本安装pip:

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

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

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


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

  • 我将python文件python.py和pythonw.exe的名称更改为python3.py pythonw3.py

  • 然后我在提示符中运行了这个命令:

    python3 -m pip install package


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

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

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

  • 原始Python 3.5:

    1
    /usr/bin/python3 -m pip install python-daemon
  • 原始Python 2.7:

    1
    /usr/bin/python -m pip install python-daemon
  • Anaconda Python 3.5:

    1
    python3 -m pip install python-daemon

    要么

    1
    pip3 install python-daemon

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

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

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

    1
    sudo apt-get install python-pip

    要么

    1
    sudo apt-get install python3-pip


    我最近自己遇到了这个问题,并发现我的Linux系统上也没有Python 3的正确点。

    首先,您必须确保已为python版本安装了pip:

    对于Python 2:

    1
    sudo apt-get install python-pip

    对于Python 3:

    1
    sudo apt-get install python3-pip

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

    1
    pip install <package>

    或者对于Python 3:

    1
    pip3 install <package>

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

    1
     python2.7 /usr/bin/pip install foo

    要么

    1
    python2.7 -m pip install foo

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

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    $ 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
    >>>


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

    以下是如何安装同时安装的各种版本的软件包linux,mac,posix:

    1
    2
    3
    4
    5
    6
    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开关结合使用:

    1
    2
    3
    4
    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

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

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

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

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

    1
    2
    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的错误,那么试试:

    1
    pip install SomePackage


    这里的大多数答案都解决了这个问题,但是我想在CentOS 7上的/usr/local中添加一些令人困惑的东西让我感到困惑。当我在那里安装时,它看起来像pip工作了,因为我可以使用pip2.7 install,它会安装模块。但是,我无法弄清楚为什么我新安装的python版本没有看到我正在安装的内容。

    事实证明,在CentOS 7中,/usr/bin文件夹中已经存在python2.7和pip2.7。要为新的python发行版安装pip,需要专门告诉sudo转到/usr/local/bin

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

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

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

    如果要安装新模块。我永远记得sudo没有立即看到/usr/local/bin


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

  • 下载点子https://pypi.python.org/pypi/pip(tar)
  • 解压缩tar文件
  • cd到文件的目录
  • sudo python2.7 setup.py安装

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


    您可以转到例如C: Python2.7 Scripts,然后从该路径运行cmd。之后你可以运行pip2.7安装你的包......

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


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

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

    步骤如下:

  • 如果您以其他方式安装了几个额外的python版本,请删除它们,例如,删除$ HOME / .local / lib / python3.x等(也是全局安装的)。不要触摸系统的默认python3版本。

  • 在以下目录结构下下载不同python版本的源代码:

    1
    2
    3
    4
    5
    6
    $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/
          ...
  • 在每个"Python-3.x.y /"目录中,执行以下操作(不要在任何步骤中使用"sudo"!):

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

    1
    2
    3
    4
    5
    env_python3x.bash:

    #!/bin/bash
    echo"type deactivate to exit"
    source $HOME/python_versions/Python-3.x.y/env/bin/activate
  • 现在,无论何时你想选择python3.x,都可以

    1
    source $HOME/python_versions/env_python3x.bash

    进入virtualenv

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

    1
    pip install --upgrade package_name
  • 要退出virtualenv和python版本,只需键入"deactivate"


  • 这可能是完全错误的事情(我是一个python noob),但我刚进去并编辑了pip文件

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    #!/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())

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

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

    安装所有3个版本的Python:

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

    enter image description here

    所有3个版本的Python的PATH:

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

    重命名版本的可执行文件:

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

    enter image description here

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

    enter image description here

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

    enter image description here


    上下文:Archlinux

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

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

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

    1
    2
    python2
    import boto

    成功:没有错误。

    退出:Ctrl + D