【发布时间】:2022-12-04 00:52:16
【问题描述】:
Python 网站上是否有关于如何在 Linux 的同一台机器上安装和运行多个版本的 Python 的官方文档?
我可以找到数以百万计的博客文章和答案,但我想知道是否有“标准”的官方方式来做到这一点?
或者这完全取决于操作系统?
【问题讨论】:
标签: python
Python 网站上是否有关于如何在 Linux 的同一台机器上安装和运行多个版本的 Python 的官方文档?
我可以找到数以百万计的博客文章和答案,但我想知道是否有“标准”的官方方式来做到这一点?
或者这完全取决于操作系统?
【问题讨论】:
标签: python
我认为它是完全独立的。只需安装它们,然后您就可以使用命令,例如/usr/bin/python2.5和/usr/bin/python2.6。将 /usr/bin/python 链接到您要用作默认值的那个。
无论如何,所有库都位于单独的文件夹中(以版本命名)。
如果你想手动编译版本,这来自 Python 源代码的自述文件:
安装多个版本
在 Unix 和 Mac 系统上,如果你打算安装多个版本的 Python 使用相同的安装前缀(配置的--prefix参数 脚本)你必须注意你的主要 python 可执行文件不是 被不同版本的安装覆盖。所有文件和 使用“make altinstall”安装的目录包含 major 和 minor 版本,因此可以并存。 “make install”也创建 ${prefix}/bin/python3 引用 ${prefix}/bin/pythonX.Y。如果你打算 要使用相同的前缀安装多个版本,您必须决定使用哪个 版本(如果有)是您的“主要”版本。使用安装该版本 “进行安装”。使用“make altinstall”安装所有其他版本。
例如,如果要安装 Python 2.5、2.6 和 3.0,其中 2.6 为 主要版本,您将在 2.6 版本中执行“make install” 目录和其他目录中的“make altinstall”。
【讨论】:
在 Windows 上,它们被安装到单独的文件夹“C:python26”和“C:python31”,但可执行文件具有相同的“python.exe”名称。
我创建了另一个“C:python”文件夹,其中包含“python.bat”和“python3.bat”,分别作为“python26”和“python31”的包装器,并将“C:python”添加到PATH环境变量.
这允许我在我的 .bat Python 包装器中键入 python 或 python3 以启动我想要的包装器。
在 Linux 上,您可以使用 #! 技巧来指定您希望脚本使用的版本。
【讨论】:
py -3.4 或 py -2.7 并且程序 py (在 C:Windows 下)将选择 python 解释器(假设它已安装)。
asdf
这些天我建议使用asdf 并排安装各种版本的 Python 解释器。
注意 1:asdf 不仅适用于 Python,而且适用于所有主要语言。
注 2:asdf 与流行的包管理器(如 pipenv 和 poetry)结合使用效果很好。
如果你有asdf installed,你可以轻松下载/安装新的 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(在主版本旁边)Ubuntu/薄荷:(在其他 Unix 上应该类似。)
1)安装源码编译所需的包
$ sudo apt-get install build-essential checkinstall
$ sudo apt-get install libreadline-gplv2-dev libncursesw5-dev libssl-dev libsqlite3-dev tk-dev libgdbm-dev libc6-dev libbz2-dev
2) 下载并解压所需的 Python 版本
Download Python Source for Linux 作为 tarball 并将其移动到 /usr/src。
将下载的包解压缩到位。(将“x”替换为您下载的版本)
$ sudo tar xzf Python-x.x.x.tgz
3)编译安装Python源码
$ cd Python-x.x.x
$ 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)
【讨论】:
下面的命令适用于 Mac,但与 Linux 非常相似(参见下面的链接)
#Install pyenv
brew update
brew install pyenv
假设您的 Mac 上的主要版本是 Python 3.6:
python --version
输出:
Python <your current version>
pyenv install -l
让我们以 3.7.3 为例:
pyenv install 3.7.3
确保在终端中运行它(将其添加到 ~/.bashrc 或 ~/.zshrc):
export PYENV_ROOT="$HOME/.pyenv"
export PATH="$PYENV_ROOT/bin:$PATH"
eval "$(pyenv init --path)"
现在让我们只在打开的terminal/shell 上运行它:
pyenv shell 3.7.3
python --version
输出:
Python 3.7.3
而且同样重要取消设置它在打开的 shell/iTerm 中:
pyenv shell --unset
【讨论】:
如何安装不同的 Python 版本确实取决于操作系统。
但是,如果您使用的是 Linux,则可以使用 pythonbrew 或 pythonz 之类的工具来帮助您轻松管理和在不同版本之间切换。
【讨论】:
$user1 另一个默认的 python 版本?
pyenv 将为此工作。从上面发布的链接中的自述文件: > [让我们] 以每个用户为基础更改全局 Python 版本。
对于可以安装和管理多个版本的 python 的包管理器,这些是不错的选择:
这些包管理器的优势在于,与从源代码安装 python 相比,设置它们并使用它们安装多个版本的 python 可能更容易。它们还提供了使用垫片轻松更改可用 python 版本和设置每个目录的 python 版本的命令。
这个缺点是,默认情况下,它们安装在用户级别(在您的主目录中)并且需要一些用户级别的配置 - 您需要编辑您的 ~/.profile 和 ~/.bashrc 或类似文件.这意味着使用它们为所有用户全局安装多个 python 版本并不容易。为此,您可以从源代码安装操作系统现有的 python 版本。
此方法需要 root 权限。
有关其他注意事项和选项,请参阅official python documentation for building from source。
/usr/local 是系统管理员安装共享(系统范围)软件的指定位置,因此它的子目录是下载 python 源和安装的好地方。参见section 4.9 of the Linux Foundation's File Hierarchy Standard。
安装任何构建依赖项。在基于 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 Source Releases 页面以获取列表。
下载并解压/usr/local/src中的文件,将下面的X.X.X替换为python版本(即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
在构建和安装之前,使用必要的 C 编译器标志设置 CFLAGS 环境变量(参见 GNU 的 make documentation)。这对于一般用途来说通常不是必需的,但是如果,例如,你打算用这个 python 版本创建一个 uWSGI 插件,你可能想要设置标志,-fPIC,具有以下内容:
export CFLAGS='-fPIC'
将工作目录更改为解压的 python 源目录,并配置构建。对于profile guided optimization,您可能希望在./configure 命令上使用--enable-optimizations 选项。使用 --prefix=/usr/local 安装到正确的子目录(/usr/local/bin、/usr/local/lib 等)。
cd Python-X.X.X
./configure --enable-optimizations --prefix=/usr/local
使用make 构建项目并使用make altinstall 安装,以避免在安装多个版本时覆盖任何文件。请参阅 python 构建文档的 this page 上的警告。
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)或设置别名以使用此版本。
【讨论】:
它在很大程度上取决于您使用的包分发系统。例如,使用 MacPorts,您可以安装多个 Python 包并使用 pyselect 实用程序轻松地在它们之间切换默认设置。在任何时候,您都可以通过提供完整路径来调用不同的 Python 解释器,并且您可以通过提供完整路径来链接所有 Python 库和标头。
所以基本上,无论您以何种方式安装版本,只要您将安装分开,您就可以单独运行它们。
【讨论】:
我用 anaconda navigator 做了这个。我安装了 anaconda navigator 并使用不同的 python 版本创建了两个不同的开发环境
并通过切换或激活和停用环境在不同的 python 版本之间切换。
首先安装 anaconda navigator,然后创建环境。
在此处查看有关如何管理环境的帮助
https://docs.anaconda.com/anaconda/navigator/tutorials/manage-environments/
这是用 conda 做的视频
【讨论】:
我建议使用pyenv。它是一个python版本管理器,可以帮助你在同一台机器上管理多个python版本。
【讨论】:
想用另一种方法来做到这一点,即在系统默认值的同时安装其他版本的 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 可能会更好。
【讨论】:
可能值得注意的是,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
【讨论】: