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

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

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


当前回答

其他答案展示了如何将pip与两者一起使用。X和3。X Python,但没有说明如何处理多个Python发行版的情况(例如。原始Python和Anaconda Python)。

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

下面是我如何安装一个包到:

原始Python 3.5: /usr/bin/python3 -m PIP安装python-daemon 原始Python 2.7: /usr/bin/python -m PIP安装python-daemon 蟒蛇3.5: Python3 -m PIP安装python-daemon 或 Pip3安装python-daemon 更简单,因为Anaconda在用户环境中覆盖原始的Python二进制文件。 当然,安装在anaconda应该用conda命令来完成,这只是一个例子。


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

sudo apt-get install python-pip 

or

sudo apt-get install python3-pip

其他回答

在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

其他答案展示了如何将pip与两者一起使用。X和3。X Python,但没有说明如何处理多个Python发行版的情况(例如。原始Python和Anaconda Python)。

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

下面是我如何安装一个包到:

原始Python 3.5: /usr/bin/python3 -m PIP安装python-daemon 原始Python 2.7: /usr/bin/python -m PIP安装python-daemon 蟒蛇3.5: Python3 -m PIP安装python-daemon 或 Pip3安装python-daemon 更简单,因为Anaconda在用户环境中覆盖原始的Python二进制文件。 当然,安装在anaconda应该用conda命令来完成,这只是一个例子。


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

sudo apt-get install python-pip 

or

sudo apt-get install python3-pip

它在windows中是这样工作的:

我将python文件的名称python.py和pythonw.exe更改为python3.py pythonw3.py 然后我在提示符中运行这个命令: Python3 -m PIP安装包

以下是我对这个问题的看法。适用于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"

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

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

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

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