处理多个 Python 版本和 PIP?
- 2024-11-22 08:47:00
- admin 原创
- 261
问题描述:
有什么方法可以pip
很好地兼容多个版本的 Python?例如,我想使用pip
明确地将内容安装到我的站点 2.5 安装或我的站点 2.6 安装中。
例如,对于easy_install
,我使用easy_install-2.{5,6}
。
是的,我了解 virtualenv,但它不是解决这个特定问题的办法。
解决方案 1:
目前的建议是使用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了解更多详细信息
参考:
https://pip.pypa.io/en/stable/news/#v0-8或
解决方案 2:
在 Windows 上,如果您选择在 Python 3 安装期间安装它,则可以通过Python 启动器使用给定的 Python 版本执行 pip 模块。py.exe
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
解决方案 3:
/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 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
解决方案 5:
它对我在 Windows 中的作用如下:
我将 python 文件 python.py 和 pythonw.exe 的名称更改为 python3.py pythonw3.py
然后我在提示符下运行了这个命令:
python3 -m pip install package
解决方案 6:
其他答案展示了如何在 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:
/usr/bin/python3 -m pip install python-daemon
原始Python 2.7:
/usr/bin/python -m pip install python-daemon
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
解决方案 7:
来自这里: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
解决方案 8:
我最近自己遇到了这个问题,发现在我的 Linux 系统上(同时安装了 Python 2)没有获得适用于 Python 3 的正确 pip。
首先,你必须确保已经安装了适合你的 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>
解决方案 9:
pip 也是一个 Python 包。因此,将模块安装到特定 Python 版本的最简单方法是如下
python2.7 /usr/bin/pip install foo
或者
python2.7 -m pip install foo
解决方案 10:
因此,显然存在多个版本的easy_install
和 pip
。这似乎很乱。无论如何,这是我在 Ubuntu 12.10 上安装 Django for Python 2.7 的步骤:
$ 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
>>>
解决方案 11:
在 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
解决方案 12:
安装多个版本的 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\Scripts;C:\Python34\;C:\Python34\Scripts;C:\Python36\;C:\Python36\Scripts\;
重命名版本的可执行文件:
将C:\Python36和C:\Python34中的python可执行文件名分别改为python36和python34。
检查所有版本的命令提示符:
为每个版本单独安装软件包
解决方案 13:
如果您有多个版本以及多个架构(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
解决方案 14:
以下是我对这个问题的看法。适用于 Python3。主要特点是:
每个 Python 版本都是从源代码编译而来的
所有版本均在本地安装
不会以任何方式破坏系统的默认 Python 安装
每个 Python 版本都使用 virtualenv 进行隔离
先决条件:如果您正在使用一些没有安装额外软件的简单瘦客户端,您应该先运行这个(至少在 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 \nopenssl libssl-dev libffi-dev unzip pciutils net-tools \nlibblas-dev gfortran libblas3
步骤如下:
如果你以其他方式安装了多个额外的 python 版本,请删除它们,例如删除$HOME/.local/lib/python3.x等(也包括全局安装的版本)。但不要触碰系统默认的 python3 版本。
在以下目录结构下下载不同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/
...
在每个“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
在“python_versions/”创建如下文件:
env_python3x.bash:
#!/bin/bash
echo "type deactivate to exit"
source $HOME/python_versions/Python-3.x.y/env/bin/activate
现在,无论何时你想选择 python3.x,请执行以下操作
source $HOME/python_versions/env_python3x.bash
进入虚拟环境
在虚拟环境中,使用以下命令安装你最喜欢的 Python 包
pip install --upgrade package_name
要退出虚拟环境和 Python 版本,只需输入“deactivate”
更新
似乎--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/
做
export 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中启用virtualenv(当然,你已经在你的docker镜像中构建了它):
ENV VIRTUAL_ENV=/home/USER/Python-3.x.y/env
ENV PYTHONPATH=
ENV PATH="$VIRTUAL_ENV/bin:$PATH"
解决方案 15:
您可以使用以下命令之一:
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
解决方案 16:
对于 Python 3 和 Windows 操作系统,我总是使用以下语法来安装不同版本的包:
首先,我总是使用 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 install urllib3:常规 pip 命令
解决方案 17:
起始价点子22.3
,您可以使用--python
选项来允许pip
管理除安装 pip 之外的 Python 环境。
python -m pip --python <PATH_TO_PYTHON_INTERPRETER_YOU_WANT_TO_MANAGE> install package_name
引用文档:
有时,您可能希望使用来管理除安装到的
pip
Python 安装之外的其他安装。在这种情况下,您可以使用该选项指定要管理的解释器。此选项可以采用以下两个值之一:pip
`--python`
Python 可执行文件的路径。
虚拟环境的路径。
在这两种情况下,
pip
它的运行方式都和从该 Python 环境调用时完全一样。这可能有用的一个例子是管理尚未
pip
安装的虚拟环境。$ python -m venv .venv --without-pip $ python -m pip --python .venv install SomePackage [...] Successfully installed SomePackage
如果您想要明确说明,也可以使用
--python .venv/bin/python
(或在 Windows 上
),但虚拟环境名称更短且工作原理完全相同。--python .venvScriptspython.exe
解决方案 18:
这里的大部分答案都解决了这个问题,但我想补充一点,关于在/usr/local
CentOS 7 上创建 python 的替代安装,我一直对此感到困惑。当我在那里安装时,pip 似乎在工作,因为我可以使用pip2.7 install
它并且它会安装模块。然而,我无法弄清楚为什么我新安装的 python 版本看不到我正在安装的内容。
在 CentOS 7 中,文件夹中已经有一个 python2.7 和一个 pip2.7 /usr/bin
。要为新的 Python 发行版安装 pip,您需要特别告诉 sudo 转到/usr/local/bin
sudo /usr/local/bin/python2.7 -m ensurepip
这应该会将 pip2.7/usr/local/bin
和你的 Python 版本一起安装在你的文件夹中。诀窍在于,当你想安装模块时,你要么需要修改 sudo$PATH
变量以包含/usr/local/bin
,要么需要执行
sudo /usr/local/bin/pip2.7 install <module>
如果您想安装新模块。我花了很长时间才想起那sudo
不是立即看到的/usr/local/bin
。
解决方案 19:
背景:Archlinux
操作:
安装 python2-pip:
sudo pacman -S python2-pip
您现在有了 pip2.7:
sudo pip2.7 install boto
测试(在我的情况下我需要“boto”):
运行以下命令:
python2
import boto
成功:没有错误。
退出:Ctrl
+D
解决方案 20:
例如,如果你将其他版本(例如 3.5)设置为默认版本,并且想要为 python 2.7 安装 pip:
在https://pypi.python.org/pypi/pip下载 pip (tar)
解压 tar 文件
cd 到文件目录
sudo python2.7 setup.py 安装
解决方案 21:
如果您已安装python3.6
和python3.7
,并希望默认使用pip
,python3.7
则应执行以下操作:
首先确保你已经pip
安装了python3.7
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 (python 3.7)的 pip 20.1.1
这意味着,如果您使用,例如:
pip install <package>
它将<package>
安装python3.7
解决方案 22:
另一种可能的方法是使用 conda 和 pip。有时你可能只想使用其中之一,但如果你真的需要设置特定版本的 python,我会将两者结合起来。
我使用我想要的 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
然后使用你喜欢的 Python 激活你的环境。此命令可能会根据操作系统而变化。
source activae myenv
现在您已经激活了 python,那么您可以继续使用 conda,但如果您需要/想要使用 pip:
python -m pip -r requirements.txt
这里有一个可行的方法。
解决方案 23:
要使用 pip 的多个版本,只需输入
pip{version} 并运行命令
例如:针对 Python 3.10
pip3.10
pip3.10 列表
pip3.10
对于 Python 3.7
pip3.7
pip3.7 列表
解决方案 24:
使用 pip 的特定位置更新 PIP 并安装软件包:
在一些实验室机器上使用简单命令行时,我收到间歇性错误“访问被拒绝”,pip install <library>
这些机器使用来自c:/users...
文件夹的 pip,而不是c:Program FilesPython
所有用户的文件夹。感谢上面的 MultiplyByZer0 回答,我能够实现一个解决方案,指定 python 的路径,然后运行 pip。
这是我用来强制 pip 更新然后安装 python 库的 powershell 脚本:
$fullPath = "C:Program FilesPython38"
$thisApp = "python.exe"
$arguments = "-m pip install --upgrade pip"
$appPath = join-path $fullPath $thisApp
Start-Process $appPath $arguments -Verb RunAs -Wait
$packages = @( "pylint"
"pillow"
"pygame"
"matplotlib"
"pandas"
"godirect")
foreach ($package in $packages)
{
Write-Host "Installing python Package" $package -ForegroundColor Yellow
$arguments = "-m pip install $package"
Start-Process $appPath $arguments -Verb RunAs -Wait
}
解决方案 25:
根据最新的 Ubuntu-LTS 22.04 和 Python 3 进行更新,但可以按照类似的说明对 Python 2 进行适当的版本更改。
您可以考虑使用 pyenv python 环境管理器,它可以让您并行配置不同版本的 python,而无需创建单独的虚拟环境或安装单独的 pip。
安装说明可在此处找到,配置 pyenv 非常容易。https ://github.com/pyenv/pyenv#readme
但是,这需要您安装先决条件库,安装方法如下:
基于Redhat的系统
sudo yum install git gcc zlib-devel bzip2 bzip2-devel readline-devel sqlite sqlite-devel openssl-devel tk-devel libffi-devel make curl llvm
基于 Ubuntu/Debian 的 Linux 系统
sudo apt-get install -y make build-essential libssl-dev zlib1g-dev libbz2-dev
libreadline-dev libsqlite3-dev wget curl llvm libncurses5-dev libncursesw5-dev xz-utils tk-dev libffi-dev liblzma-dev python3-openssl git
安装先决条件后,请按照README.md中的说明进行操作。
安装完成后,要检查系统中存在的 Python 版本,请在终端中运行以下命令
pyenv versions
请注意,如果您在设置 pyenv 之前安装了 python 版本,则可能无法检测到已安装的版本,并且您可能必须删除它们(包括依赖项)。注意在执行此操作时不要删除重要的 lib 文件。
安装新版本的 Python
pyenv install <version_number> # like 3.9 for installing python3.9
安装后,将 python 版本设置为默认版本,运行以下命令。
pyenv global <version_number> # to set it globally
pyenv local <version_number> # to set it in the local directory
您可以随时使用带有所需版本号的pyenv global
、pyenv local
或命令在已安装的 Python 版本之间切换。pyenv shell
请注意,此安排与虚拟环境不同,因为它允许您在使用其他系统级库和包的同时在系统范围级别管理多个版本的 Python。但是,pyenv 确实有插件可以启用虚拟环境支持,可以根据此处列出的说明进行安装https://github.com/pyenv/pyenv-virtualenv#readme
只需删除 pyenv 文件夹并恢复对 和/或类似文件所做的任何更改即可删除.bashrc
Pyenv .bash_profile
。
希望这有帮助。
解决方案 26:
例如,您可以转到 C:\Python2.7\Scripts,然后从该路径运行 cmd。之后,您可以运行 pip2.7 install yourpackage...
这将安装该版本 Python 的包。
解决方案 27:
这可能是完全错误的做法(我是 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())
解决方案 28:
对于 Windows,具体来说:
\path\to\python.exe -m pip install PackageName有效。
解决方案 29:
对于搅拌机:
/usr/bin $ python3.7 -m pip install irc