有没有办法让pip在多个版本的Python中都能很好地运行?例如,我想使用pip显式地将东西安装到我的站点2.5安装或站点2.6安装中。

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

是的,我知道virtualenv,不,它不是这个特殊问题的解决方案。


当前回答

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

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

前提条件:如果你正在使用一些基本的瘦客户端,没有安装额外的turf,你应该首先运行这个(至少在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 

具体步骤如下:

If you have several extra python versions installed in some other way, get rid of them, e.g., remove $HOME/.local/lib/python3.x, etc. (also the globally installed ones). Don't touch your system's default python3 version though. Download source for different python versions under the following directory structure: $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/ ... At each "Python-3.x.y/" directory, do the following (do NOT use "sudo" in any of the steps!): mkdir root ./configure --prefix=$PWD/root make -j 2 make install virtualenv --no-site-packages -p root/bin/python3.x env At "python_versions/" create files like this: env_python3x.bash: #!/bin/bash echo "type deactivate to exit" source $HOME/python_versions/Python-3.x.y/env/bin/activate Now, anytime you wish to opt for python3.x, do source $HOME/python_versions/env_python3x.bash

进入virtualenv

在virtualenv中,安装你喜欢的python包 PIP install——upgrade package_name 要退出virtualenv和python版本,只需输入“deactivate”

更新

似乎不赞成使用无站点包。有一个简单的解决方法:一旦你激活了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。

更新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"

其他回答

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

在https://pypi.python.org/pypi/pip (tar)下载PIP 解压缩tar文件 CD到文件的目录 Sudo python2.7 setup.py install

简单而近期

在windows上

1-假设您的系统中安装了不同版本的Python。使用以下命令进行检查:

> py --list
 -3.10-64 *
 -3.7-64

2-设置您首选的默认版本:

通过设置PY_PYTHON环境变量(例如PY_PYTHON=3.7)。 通过设置py.ini文件通常位于C:\Users\<您的用户名>\AppData\Local如果没有创建一个。例如,设置PY_PYTHON=3和PY_PYTHON3=3.7环境变量等价于INI文件包含:

[defaults]
python=3
python3=3.7

3-检查再次输入py——list:

> py --list
 -3.10-64 
 -3.7-64 *

4-如果你想用特定版本的python和pip运行虚拟环境,请参阅这篇文章。

Linux (Ubuntu)

在Linux上管理不同的python版本的一个简单方法是update-alternatives命令。这个命令使我们能够轻松地在同一软件的多个版本之间切换。

command format:update-alternatives --install link name path priority, the name is the generic name for the master link, the link is the name of its symlink, the path is the alternative being introduced for the master link, and priority is the priority of the alternatives group. Usage: Suppose you installed two versions of python (python3.10 , python3.7). Now by running this command you will link the command name (python3) to different versions of python and assign a priority number. A higher priority number means a higher priority.

$ update-alternatives --install /usr/bin/python3 python3 /usr/bin/python3.7 1
$ update-alternatives --install /usr/bin/python3 python3 /usr/bin/python3.10 2

使用此命令列出已安装的python版本:

$ update-alternatives --list python3
/usr/bin/python3.7
/usr/bin/python3.10

版本切换:执行以下命令后,只需手动选择所需python版本的优先级编号。

$ update-alternatives --config python3

There are 2 choices for the alternative python3 (providing /usr/bin/python3).

  Selection    Path                      Priority   Status
------------------------------------------------------------
  0            /usr/bin/python3.10   2         auto mode
* 1            /usr/bin/python3.7   1         manual mode
  2            /usr/bin/python3.10   2         manual mode

Press <enter> to keep the current choice[*], or type selection number: 2

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

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

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

Pip {version}和运行命令

示例:用于python 3.10

pip3.10 pip3.10列表

pip3.10

适用于Python 3.7

pip3.7 pip3.7列表