处理多个Python版本和PIP?


498

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

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

而且,是的-我了解virtualenv,不是-这不是解决此特定问题的方法。


1
@YiboYang可以pip34和和一起使用pip35吗?
JinSnow

2
@JinSnow应该提供(pip3.x实际上管理要安装软件包的python版本pip3.x -V)(也许可以运行)。或使用@Hugo的解决方案更好地控制许多python版本。
杨艺博

Answers:


624

目前的建议是使用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

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

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

检查https://github.com/pypa/pip/pull/1053了解更多详细信息


参考文献:


12
不起作用 尽管最新版本的pip安装了pip-2.6脚本,但并没有安装pip-2.5脚本的麻烦。
克里斯·B

2
您需要更新python2.5 pip版本...仅在您使用pip的python下创建pip- {PYVERSION}。
雨果·塔瓦雷斯

4
这是不正确的。我在Ubuntu上使用Python2.7运行pip 1.2.1,并且没有其他pip版本。
塞林2012年

2
@rodling:可能是你没装pip通过pip/ easy_installget-pip.py或者你没有python2.7。如果你有python2.7,尝试:pip install --upgrade pip你应该有pippip-2.7
雨果·塔瓦雷斯

2
@JCRocamonde:pip基于环境变量$ PATH拾取程序。如果要更改“默认” pip程序,请对$ PATH环境变量重新排序。搜索类似“路径环境变量linux”之类的内容,以获取有关$ PATH的更多详细信息。
雨果·塔瓦雷斯

116

在Windows中,您可以执行使用通过给定的Python版本的PIP模块Python的发射器py.exe如果你选择了Python 3的安装过程中安装它。

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

11
在Windows上同时安装了2.7和3.5,就可以立即使用
phil_lgr

1
有没有办法有python2python3pip2pip3在Windows?
thomthom '17

1
这在Windows上对我有用。安装了3个,然后安装了2个
daneshjai

1
谢谢,这对我有用!简直难以置信。(这些或变体python-3.7 -m pip installpython-3.7 -m pip installpython3.7 -m pip install都不对我
有用

75

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

为了使它能够在尚未安装pip的任何python版本上运行,您需要下载pip并执行python*version* setup.py install。例如python3.3 setup.py install。这样可以解决注释中的导入错误。(由@hbdgaf建议)


4
为此,要说python 3,您需要下载pip并执行“ python3 setup.py install”。我个人认为此解决方案不是很好。首先,我什至不知道pip命令不是二进制文件。这不是对@bwinton的批评,我很惊讶没有更好的方法可以做到这一点。
Mike Vella 2012年

28
“导入错误:没有名为pkg_resources的模块”
Cerin

3
我感到困惑的是,importerror的问题比解决上面同一条评论的方法引起了更多关注。
RobotHumans 2014年

1
另外,/ path / to / pip是这样的:python2。{5,6} / Scripts / pip2。{5,6}
raul

2
要调用python模块,您应该使用python2.7 -m pip install PackageName
llrs

52

我默认情况下安装了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

2
以下代码对python 3.4 python3 get-pip.py很有帮助:后来与pip命令一起使用pip34 install example
Karl Adler 2014年

谢谢。很有用。在两个不同的服务器上测试。
user2099484 2015年

3
当我使用“ python2.7 get-pip.py”而不是“ python27 get-pip.py”时,此方法有效
SummerEla 2015年

那男人感到模糊,但它为我工作在CentOS 5安装pip2.6
阿伦R.

得到了Could not find a version that satisfies the requirement pip (from versions: ) No matching distribution found for pip当我试图python2.6 get-pip.py
Pyderman

29

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

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

  2. 然后,我在提示符中运行了此命令:

    python3 -m pip install package


4
只要其他人知道如何在Mac上使用pip在python3中安装软件包,此命令就是您如何安装软件包。我花了几个小时进行搜索,终于找到了它!
sidney

25

其他答案显示了如何在2.X和3.X Python上同时使用pip,但没有显示如何处理多个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的默认设置
quasoft

1
先生,你是那个男人。在围绕此问题的所有完全无用的解释中,这是唯一对我有意义的解释。是时候给这些命令起别名了,继续我的生活!谢谢。
Iofacture

14

我本人最近遇到了这个问题,发现在我的同时具有Python 2的Linux系统上,我对Python 3的了解不正确。

首先,您必须确保已为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>

11

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

 python2.7 /usr/bin/pip install foo

要么

python2.7 -m pip install foo

10

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

$ 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
>>> 

8

从这里: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
jmunsch

7

在Linux,Mac OS X和其他POSIX系统上,结合使用版本化的Python命令和-m开关,以运行以下命令的适当副本pip

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

(也可能提供适当版本的pip命令)

在Windows上,将pyPython启动器与-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

5

安装多个版本的Python和相应的软件包。

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

安装所有3个版本的Python

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

在此处输入图片说明

所有3个版本的Python的PATH

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

重命名版本的可执行文件

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

在此处输入图片说明

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

在此处输入图片说明

为每个版本分别安装软件包

在此处输入图片说明


谢谢 !!!这是最好的方法
rakshit ks

4

如果您有多个版本以及多个体系结构(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

2

这里的大多数答案都解决了这个问题,但是我想添加一些使我/usr/local在CentOS 7上的python替代安装中不断困惑的东西。当我安装在那里时,由于可以使用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


2

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

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

步骤如下:

  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.xy /”目录中,执行以下操作(在任何步骤中都不要使用“ 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

    进入virtualenv

  6. 在virtualenv中,使用以下命令安装您喜欢的python软件包:

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

更新

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

export HOME=some/where/else

通常,执行此操作的一种好方法是:

  • 创建virtualenv
  • 激活virtualenv
  • 如果要将现有库“回收”到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。


0

上下文:Archlinux

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

您现在有了pip2.7:
sudo pip2.7 install boto

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

python2
import boto

成功:没有错误。

出口:Ctrl+D



0

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

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


0

这可能是完全错误的操作(我是python noob),但是我只是进去编辑了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())

0

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


0

对于搅拌机:

/usr/bin $ python3.7 -m pip install irc
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.