处理多个 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,但它不是解决这个特定问题的办法。解决...

问题描述:

有什么方法可以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

https://web.archive.org/web/20140310013920/http://www.pip-installer.org:80/docs/pip/en/0.8.3/news.html#id4

解决方案 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 中的作用如下:

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

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

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。

以下是我安装包的方法:

  1. 原始Python 3.5

/usr/bin/python3 -m pip install python-daemon
  1. 原始Python 2.7

/usr/bin/python -m pip install python-daemon
  1. 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 上,将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

解决方案 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 

步骤如下:

  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/
       ...
  1. 在每个“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
  1. 在“python_versions/”创建如下文件:

 env_python3x.bash:

 #!/bin/bash
 echo "type deactivate to exit"
 source $HOME/python_versions/Python-3.x.y/env/bin/activate
  1. 现在,无论何时你想选择 python3.x,请执行以下操作

 source $HOME/python_versions/env_python3x.bash

进入虚拟环境

  1. 在虚拟环境中,使用以下命令安装你最喜欢的 Python 包

 pip install --upgrade package_name
  1. 要退出虚拟环境和 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

引用文档:

有时,您可能希望使用来管理除安装到的pipPython 安装之外的其他安装。在这种情况下,您可以使用该选项指定要管理的解释器。此选项可以采用以下两个值之一:pip`--python`

  1. Python 可执行文件的路径。

  2. 虚拟环境的路径。

在这两种情况下,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/localCentOS 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:

  1. https://pypi.python.org/pypi/pip下载 pip (tar)

  2. 解压 tar 文件

  3. cd 到文件目录

  4. sudo python2.7 setup.py 安装

解决方案 21:

如果您已安装python3.6python3.7,并希望默认使用pippython3.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,我会将两者结合起来。

  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

  1. 然后使用你喜欢的 Python 激活你的环境。此命令可能会根据操作系统而变化。

source activae myenv

  1. 现在您已经激活了 python,那么您可以继续使用 conda,但如果您需要/想要使用 pip:

python -m pip -r requirements.txt

这里有一个可行的方法。

解决方案 23:

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

pip{ve​​rsion} 并运行命令

例如:针对 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 globalpyenv local或命令在已安装的 Python 版本之间切换。pyenv shell

请注意,此安排与虚拟环境不同,因为它允许您在使用其他系统级库和包的同时在系统范围级别管理多个版本的 Python。但是,pyenv 确实有插件可以启用虚拟环境支持,可以根据此处列出的说明进行安装https://github.com/pyenv/pyenv-virtualenv#readme

只需删除 pyenv 文件夹并恢复对 和/或类似文件所做的任何更改即可删除.bashrcPyenv .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
相关推荐
  政府信创国产化的10大政策解读一、信创国产化的背景与意义信创国产化,即信息技术应用创新国产化,是当前中国信息技术领域的一个重要发展方向。其核心在于通过自主研发和创新,实现信息技术应用的自主可控,减少对外部技术的依赖,并规避潜在的技术制裁和风险。随着全球信息技术竞争的加剧,以及某些国家对中国在科技领域的打压,信创国产化显...
工程项目管理   1565  
  为什么项目管理通常仍然耗时且低效?您是否还在反复更新电子表格、淹没在便利贴中并参加每周更新会议?这确实是耗费时间和精力。借助软件工具的帮助,您可以一目了然地全面了解您的项目。如今,国内外有足够多优秀的项目管理软件可以帮助您掌控每个项目。什么是项目管理软件?项目管理软件是广泛行业用于项目规划、资源分配和调度的软件。它使项...
项目管理软件   1354  
  信创国产芯片作为信息技术创新的核心领域,对于推动国家自主可控生态建设具有至关重要的意义。在全球科技竞争日益激烈的背景下,实现信息技术的自主可控,摆脱对国外技术的依赖,已成为保障国家信息安全和产业可持续发展的关键。国产芯片作为信创产业的基石,其发展水平直接影响着整个信创生态的构建与完善。通过不断提升国产芯片的技术实力、产...
国产信创系统   21  
  信创生态建设旨在实现信息技术领域的自主创新和安全可控,涵盖了从硬件到软件的全产业链。随着数字化转型的加速,信创生态建设的重要性日益凸显,它不仅关乎国家的信息安全,更是推动产业升级和经济高质量发展的关键力量。然而,在推进信创生态建设的过程中,面临着诸多复杂且严峻的挑战,需要深入剖析并寻找切实可行的解决方案。技术创新难题技...
信创操作系统   27  
  信创产业作为国家信息技术创新发展的重要领域,对于保障国家信息安全、推动产业升级具有关键意义。而国产芯片作为信创产业的核心基石,其研发进展备受关注。在信创国产芯片的研发征程中,面临着诸多复杂且艰巨的难点,这些难点犹如一道道关卡,阻碍着国产芯片的快速发展。然而,科研人员和相关企业并未退缩,积极探索并提出了一系列切实可行的解...
国产化替代产品目录   28  
热门文章
项目管理软件有哪些?
云禅道AD
禅道项目管理软件

云端的项目管理软件

尊享禅道项目软件收费版功能

无需维护,随时随地协同办公

内置subversion和git源码管理

每天备份,随时转为私有部署

免费试用