处理多个Python版本和PIP?

有没有办法让pip与多个版本的Python一起玩得很好?例如,我想使用pip将东西显式安装到我的站点2.5安装或站点2.6安装中。

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

而且,是的-我知道虚拟环境,不-它不是这个特定问题的解决方案。

870880 次浏览

/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 -m pip,其中python是您想使用的Python版本。这是建议,因为它适用于所有版本的Python以及所有形式的虚拟环境。例如:

# 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更改了它的模式,在版本1.5中使用pipVERSION而不是pip-VERSION。如果您有pip >= 1.5,您应该使用以下内容:

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

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


参考文献:

所以显然有多个版本的easy_installpip。看起来一团糟。不管怎样,这就是我在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
>>>

我默认安装了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获得正确的pip,在我的Linux系统上也有Python 2。

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

在Windows上,如果您选择在Python 3安装期间安装它,您可以通过python启动器py.exe使用给定的Python版本执行pip模块。

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中以这种方式工作:

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

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

    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。

这是我如何将包安装到:

  1. 原始python3.5

    /usr/bin/python3 -m pip install python-daemon
    
  2. Original 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命令完成,这只是一个例子。


此外,请确保为该特定蟒蛇安装了pip。您可能需要手动安装pip。这在Ubuntu 16.04中有效:

sudo apt-get install python-pip

sudo apt-get install python3-pip

背景:Archlinux

操作:
安装python2-pip:
sudo pacman -S python2-pip

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

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

python2
import boto

成功:没有错误。

出口:Ctrl+D

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

以下是如何为同时安装的各种版本安装包linux, mac, postx

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

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

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

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

 python2.7 /usr/bin/pip install foo

python2.7 -m pip install foo

这里的大多数答案都解决了这个问题,但我想补充一些让我一直困惑的事情,那就是在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

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

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

在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

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

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

先决条件:如果您使用的是一些没有安装额外草皮的基本瘦客户端,您应该首先运行这个(至少在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/python 3. 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. 在虚拟环境中,安装您最喜欢的python包

     pip install --upgrade package_name
    
  2. 要退出虚拟环境和Python版本,只需键入“停用”

更新

似乎--no-site-packages已被弃用。对此有一个简单的解决方案:激活虚拟环境后,只需将HOME环境变量指向实际主目录以外的其他地方,即:

export HOME=some/where/else

一般来说,这样做的一个好方法是:

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

现在你应该有自定义隔离的虚拟环境。

更新2/SUDO

不想强迫sudo用你的虚拟环境吗?

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中启用虚拟环境(当然,您已经在docker映像中构建了它):

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

这可能是完全错误的做法(我是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())

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

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

安装所有3个版本的Python

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

在此处输入图片描述

适用于所有3个版本的Python的PATH

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

为版本重命名可执行文件

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

在此处输入图片描述

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

在此处输入图片描述

为每个版本分别安装包

在此处输入图片描述

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

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

搅拌机:

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

如果您同时安装了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的pip 20.1.1(python 3.7)

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

pip install <package>

它将为python3.7安装<package>

另一种可能的方法是使用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

这里你有一个可能的方法。

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

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

对于python 3和Windows OS,我总是使用这个语法在不同的版本上安装包:

首先,我总是使用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安装urllib3:正常的pip命令

要使用多个版本的pip,只需键入

pip{version}并运行命令

示例:对于python 3.10

pip3.10

pip3.10列表

对于python3.7

pip3.7

pip3.7列表

调试此命令的一些有用信息是pip debug命令。它在第一行(警告之后)显示了它附加到的python解释器的位置。

$ pip debug
WARNING: This command is only meant for debugging. Do not use this with automation for parsing and getting these details, since the output and options of this command may change without notice.
pip version: pip 21.2.4 from /data/akshay/anaconda3/lib/python3.9/site-packages/pip (python 3.9)
sys.version: 3.9.12 (main, Apr  5 2022, 06:56:58)
sys.executable: /data/akshay/anaconda3/bin/python