【发布时间】:2010-03-30 18:19:35
【问题描述】:
Python 网站上是否有官方文档,关于如何在 Linux 上的同一台机器上安装和运行多个版本的 Python?
我可以找到数以百万计的博客文章和答案,但我想知道是否有“标准”的官方方式来做到这一点?
或者这一切都依赖于操作系统?
【问题讨论】:
标签: python
Python 网站上是否有官方文档,关于如何在 Linux 上的同一台机器上安装和运行多个版本的 Python?
我可以找到数以百万计的博客文章和答案,但我想知道是否有“标准”的官方方式来做到这一点?
或者这一切都依赖于操作系统?
【问题讨论】:
标签: python
我认为它是完全独立的。只需安装它们,然后你就有了命令,例如/usr/bin/python2.5 和 /usr/bin/python2.6。将/usr/bin/python 链接到您要用作默认值的那个。
无论如何,所有库都在单独的文件夹中(以版本命名)。
如果你想手动编译版本,这来自 Python 源代码的自述文件:
安装多个版本
如果您打算安装多个版本的 Python,则在 Unix 和 Mac 系统上 使用相同的安装前缀(配置的 --prefix 参数 脚本)你必须注意你的主要 python 可执行文件不是 被安装不同的版本覆盖。所有文件和 使用“make altinstall”安装的目录包含主要和次要目录 版本,因此可以并排生活。 “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
如果您需要在 Ubuntu / Mint 上安装多个版本的 Python(在主版本旁边):(在其他 Unix 上应该也能正常工作。) p>
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 可能更容易。它们还提供了使用 shim 轻松更改可用 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 导航器做到了这一点。我安装了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
【讨论】: