同一台机器上有多个 Python 版本?
- 2025-01-08 08:50:00
- admin 原创
- 206
问题描述:
Python 网站上是否有关于如何在 Linux 上的同一台机器上安装和运行多个版本的 Python 的官方文档?
我可以找到无数的博客文章和答案,但我想知道是否有一种“标准”的官方方法可以做到这一点?
或者这一切都依赖于操作系统?
解决方案 1:
我认为它是完全独立的。只需安装它们,然后你就可以使用命令,例如/usr/bin/python2.5
和/usr/bin/python2.6
。链接/usr/bin/python
到你想用作默认的命令。
无论如何,所有库都位于单独的文件夹中(以版本命名)。
如果您想手动编译版本,请参阅 Python 源代码的自述文件:
安装多个版本
在 Unix 和 Mac 系统上,如果您打算使用相同的安装前缀(
--prefix
configure 脚本的参数)安装多个版本的 Python,则必须注意主 Python 可执行文件不会被其他版本的安装覆盖。使用 安装的所有文件和目录都make altinstall
包含主版本和次版本,因此可以并存。make install
还创建了${prefix}/bin/python3
引用 的版本${prefix}/bin/pythonX.Y
。如果您打算使用相同的前缀安装多个版本,则必须确定哪个版本(如果有)是您的“主”版本。使用 安装该版本make install
。使用 安装所有其他版本make altinstall
。
例如,如果您想安装 Python 2.5、2.6 和 3.0,其中 2.6 为主要版本,那么您需要
make install
在 2.6 构建目录和make altinstall
其他目录中执行。
解决方案 2:
2019 年更新:使用asdf
这些天我建议使用asdf来并排安装各种版本的 Python 解释器。
注1:asdf
不仅适用于Python,也适用于所有主流语言。
注2:asdf
与流行的包管理器(如pipenv和poetry )结合使用效果很好。
如果您安装了 asdf,您可以轻松下载/安装新的 Python 解释器:
# Install Python plugin for asdf:
asdf plugin-add python
# List all available Python interpreters:
asdf list-all python
# Install the Python interpreters that you need:
asdf install python 3.7.4
asdf install python 3.6.9
# etc...
# If you want to define the global version:
asdf global python 3.7.4
# If you want to define the local (project) version:
# (this creates a file .tool-versions in the current directory.)
asdf local python 3.7.4
旧答案:从源代码安装 Python
如果需要在 Unix 系统上安装多个版本的 Python(在主版本旁边):
安装源编译所需的软件包
$ sudo apt-get 安装 build-essential checkinstall $ sudo apt-get 安装 libreadline-gplv2-dev libncursesw5-dev libssl-dev libsqlite3-dev tk-dev libgdbm-dev libc6-dev libbz2-dev
下载并解压所需的 Python 版本
下载适用于 Linux 的 Python 源代码作为 tarball 并将其移动到/usr/src
。
将下载的软件包解压到位。(将“x”替换为您下载的版本)
$ sudo tar xzf Python-x.x.x.tgz
编译并安装 Python 源代码
$ cd Python-xxx $ sudo ./configure $ sudo make altinstall
您的新 Python bin 现在位于/usr/local/bin
。您可以测试新版本:
$ pythonX.X -V
Python x.x.x
$ which pythonX.X
/usr/local/bin/pythonX.X
# Pip is now available for this version as well:
$ pipX.X -V
pip X.X.X from /usr/local/lib/pythonX.X/site-packages (python X.X)
解决方案 3:
在 Windows 上,它们被安装到单独的文件夹“C:\python26”和“C:\python31”,但可执行文件具有相同的“python.exe”名称。
我创建了另一个“C:\python”文件夹,其中包含“python.bat”和“python3.bat”,分别作为“python26”和“python31”的包装器,并将“C:\python”添加到PATH
环境变量中。
这使我能够在 .bat Python 包装器中键入python
或python3
来启动我想要的那个。
在 Linux 上,您可以使用#!
技巧来指定脚本要使用的版本。
解决方案 4:
我正在使用 Mac,对我来说最有效的方法是使用 pyenv!
下面的命令适用于 Mac,但与 Linux 非常相似(请参阅下面的链接)
#Install pyenv
brew update
brew install pyenv
假设你的 Mac 上的主版本是 Python 3.7.6:
python --version
输出:
Python 3.7.6
现在安装python 3.10
首先,我们可以检查它是否已经存在,运行:
pyenv install --list
向上滚动(就在 anaconda 上方)以检查它是否存在/是否已安装,如果没有,请运行:
pyenv install 3.10
确保在终端中运行此程序(将其添加到 ~/.bashrc 或 ~/.zshrc):
export PYENV_ROOT="$HOME/.pyenv"
export PATH="$PYENV_ROOT/bin:$PATH"
eval "$(pyenv init --path)"
eval "$(pyenv init -)"
现在我们仅在打开的终端/shell上运行它:
pyenv shell 3.10
现在运行
python --version
输出:
Python 3.10.9
同样重要的是在打开的 shell/iTerm 中取消设置它:
pyenv shell --unset
您也可以在全球或本地运行它
解决方案 5:
包管理器 - 用户级
对于可以安装和管理多个版本的python的包管理器,这些是不错的选择:
pyenv-只能安装和管理python版本
asdf-能够安装和管理多种不同的语言
这些包管理器的优点在于,与从源代码安装 Python 相比,设置它们和使用它们安装多个版本的 Python 可能更容易。它们还提供了使用垫片轻松更改可用 Python 版本和设置每个目录的 Python 版本的命令。
缺点是,默认情况下,它们安装在用户级别(在您的主目录中),并且需要一点用户级别的配置 - 您需要编辑您的~/.profile
和~/.bashrc
或类似的文件。这意味着使用它们为所有用户全局安装多个 python 版本并不容易。为了做到这一点,您可以从源代码与操作系统现有的 python 版本一起安装。
从源安装-系统范围
您需要具有 root 权限才能使用此方法。
请参阅官方 Python 文档以了解如何从源代码构建,了解更多注意事项和选项。
/usr/local
是系统管理员安装共享(系统范围)软件的指定位置,因此其子目录是下载并安装 Python 源代码的好地方。请参阅Linux 基金会文件层次结构标准 4.9 节。
安装所有构建依赖项。在基于 Debian 的系统上,使用:
apt update
apt install build-essential zlib1g-dev libncurses5-dev libgdbm-dev libnss3-dev libssl-dev libsqlite3-dev libreadline-dev libffi-dev libbz2-dev
选择要安装的 Python 版本。请参阅Python 源代码发布页面以获取列表。
下载并解压文件,用 python 版本(即)/usr/local/src
替换以下内容。X.X.X
`3.8.2`
cd /usr/local/src
wget https://www.python.org/ftp/python/X.X.X/Python-X.X.X.tgz
tar vzxf Python-X.X.X.tgz
在构建和安装之前,请CFLAGS
用必要的 C 编译器标志设置环境变量(参见 GNU 的make
文档)。这通常不是一般用途所必需的,但是,例如,如果你要用这个 python 版本创建一个 uWSGI 插件,你可能需要设置标志,-fPIC
如下所示:
export CFLAGS='-fPIC'
将工作目录更改为解压后的 Python 源目录,然后配置构建。您可能希望--enable-optimizations
在./configure
命令中使用选项进行配置文件引导优化。使用--prefix=/usr/local
安装到适当的子目录(/usr/local/bin
、/usr/local/lib
等)。
cd Python-X.X.X
./configure --enable-optimizations --prefix=/usr/local
使用 构建项目make
并使用 安装,以避免在安装多个版本时覆盖任何文件。请参阅python 构建文档此页面make altinstall
上的警告。
make -j 4
make altinstall
然后,您应该能够使用和pythonX.X
(pipX.X
即python3.8
和pip3.8
)运行新的 python 和 pip 版本。请注意,如果新安装的次要版本与操作系统的版本相同(例如,如果您安装的是 python3.8.4 而操作系统使用的是 python3.8.2),那么您需要指定完整路径(/usr/local/bin/pythonX.X
)或设置别名以使用此版本。
解决方案 6:
如何安装不同的 Python 版本确实取决于操作系统。
但是,如果您使用的是 Linux,则可以使用pythonbrew或pythonz之类的工具来帮助您轻松管理和切换不同版本。
解决方案 7:
Fedora Linux - 只需从软件包安装即可
可能值得注意的是,Fedora 发行版包含尚未 EOL 的旧版 Python。我觉得这很方便。
例如在最近的 Fedora 35(2021 年秋季)中,默认的 Python 是 3.10,但您也可以安装 3.6、3.7、3.8 和 3.9。
这些包的描述如下:
面向开发人员的 Python 3.X 包。
此软件包允许开发人员针对旧版 Python 测试其代码。这不是完整的 Python 堆栈,如果您希望使用 Python 3 运行应用程序,请参阅支持它的其他发行版,例如旧版 Fedora。
例如,要安装 3.7 作为已安装 Python 的补充(shell 命令行,以 root 身份或使用sudo
):
dnf install python3.7
没有pip
,必须从(shell 命令行,普通用户)开始:
python3.7 -m ensurepip --user --altinstall
# --altinstall will create pip3.7 but will not overwrite pip3
然后我们就可以正常继续了:
pip3.7 install --user pytest ... # or whatever you need
解决方案 8:
2024 年更新:使用mise
Mise是安装 Python 解释器的快速工具。
mise 是一个多语言工具版本管理器。它取代了 asdf、nvm、pyenv、rbenv 等工具。
您可以按照这些说明进行安装。
# List all available Python interpreters versions:
mise ls-remote python
# Install the Python interpreters that you need:
mise install python@3.10
mise install python@3.12
# If you want to define the global version:
mise global python@3.12
# To define the local (project) version:
# (this creates a file .tool-versions in the current directory.)
mise local python@3.12
一些细节
它从https://gregoryszorc.com/docs/python-build-standalone/main/安装 Python 二进制文件,速度很快,因为通常不需要重建/重新编译
与 asdf 相比开销更低,请参阅https://mise.jdx.dev/dev-tools/comparison-to-asdf.html#performance
解决方案 9:
想提出另一种方法来实现这一点,即在系统默认版本之外安装其他版本的 Python。如果您只需要为某个特定项目安装另一个版本的 Python,那么这种方法就很轻量。它使用 deadsnakes PPA,因此这特定于 Ubuntu Linux。
说明。添加 PPA
sudo add-apt-repository ppa:deadsnakes/ppa
sudo apt update && sudo apt upgrade
现在假设你想要 Python 3.5:
sudo apt install python3.5 python3.5-dev python3.5-venv
如果需要的话,然后可以使用python3.5
路径中的可执行文件。
现在,如果你需要为特定项目创建 venv,
cd your-project
python3.5 -m venv .venv
source .venv/bin/activate
附注 - 我确实尝试了流行的“pyenv”,但发现它在 bashrc/profile 中执行了太多操作,并且减慢了 shell 提示的速度。此外,由于要编译每个版本,因此新 Python 版本的安装非常慢。如果您需要在许多项目中频繁切换 Python 版本,那么 pyenv 可能更好。
解决方案 10:
它最依赖于您使用的软件包分发系统。例如,使用 MacPorts,您可以安装多个 Python 软件包,并使用该pyselect
实用程序轻松地在它们之间切换默认软件包。在任何时候,您都可以通过提供完整路径来调用不同的 Python 解释器,并且您可以通过提供完整路径来链接到所有 Python 库和标头。
因此基本上,无论您以何种方式安装版本,只要您将安装分开,您就能够单独运行它们。
扫码咨询,免费领取项目管理大礼包!