同一台机器上有多个 Python 版本?

Python 网站上有没有关于如何在 Linux 上的同一台机器上安装和运行多个版本的 Python 的官方文档?

I can find gazillions of blog posts and answers, but I want to know if there is a "standard" official way of doing this?

还是说这一切都取决于操作系统?

189227 次浏览

它最强烈地依赖于您使用的包分发系统。例如,使用 MacPorts,您可以安装多个 Python 包,并使用 pyselect实用程序轻松地在它们之间切换默认值。在任何时候,都可以通过提供完整路径来调用不同的 Python 解释器,还可以通过提供完整路径来链接所有的 Python 库和头文件。

So basically, whatever way you install the versions, as long as you keep your installations separate, you'll able to run them separately.

我认为它是完全独立的。只要安装它们,就可以使用命令,例如 /usr/bin/python2.5/usr/bin/python2.6。将 /usr/bin/python链接到您希望作为默认值使用的。

无论如何,所有的库都在单独的文件夹中(以版本命名)。

如果您想手动编译这些版本,那么可以从 Python 源代码的 readme 文件中找到:

Installing multiple versions

On Unix and Mac systems if you intend to install multiple versions of Python 对 configure 使用相同的安装前缀(—— prefix 参数 脚本) ,您必须注意您的主 Python 可执行文件不是 不同版本的安装所覆盖 使用“ make altinstall”安装的目录包含主目录和次目录 “ make install”还可以创建 ${prefix}/bin/python3 which refers to ${prefix}/bin/pythonX.Y. If you intend 安装多个版本使用相同的前缀,你必须决定哪一个 版本(如有)是你的「主要」版本 “ make Install”。使用“ make altinstall”安装所有其他版本。

例如,如果您希望安装 Python 2.5、2.6和3.0,其中2.6是 在主版本中,您将在2.6版本中执行“ make install” directory and "make altinstall" in the others.

On Windows they get installed to separate folders, "C:\python26" and "C:\python31", but the executables have the same "python.exe" name.

我创建了另一个“ C: python”文件夹,其中包含“ python.bat”和“ python3.bat”,分别作为“ python26”和“ python31”的包装,并在 PATH环境变量中添加了“ C: python”。

这允许我在我的. batPython 包装器中键入 pythonpython3来启动我想要的那个。

在 Linux 上,您可以使用 #!技巧来指定您希望脚本使用的版本。

如何安装不同的 Python 版本确实取决于操作系统。

但是,如果您在 Linux 上,您可以使用像 蟒蛇酿造巨蟒这样的工具来帮助您轻松地管理和切换不同版本。

Update 2019: Using asdf

现在,我建议使用 ASDF将各种版本的 Python 解释器安装在一起。

注1: asdf不仅适用于 Python,而且适用于所有主要语言。

注2: asdf与流行的软件包管理器(如 pipenv诗歌)结合在一起工作得很好。

如果你有 已安装 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

如果您需要在 Ubuntu/Mint: (在其他 Unixs 上也应该如此。)上安装多个版本的 Python (紧挨着主版本)

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 版本

下载 Python Source for Linux as tarball 并将其移动到 /usr/src

就地解压下载的软件包

$ 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)

我安装了蟒蛇导航器,并用不同的 Python 版本创建了两个不同的开发环境

并通过切换或激活和禁用环境在不同的 Python 版本之间切换。

首先安装水蟒导航器,然后创建环境。

请参阅有关如何管理环境的帮助

Https://docs.anaconda.com/anaconda/navigator/tutorials/manage-environments/

这是和 Conda 一起做的视频

https://youtu.be/EGaw6VXV3GI

我正在使用 Mac & 最适合我的方法就是使用 pyenv!

下面的命令是针对 Mac 的,但与 Linux 非常相似(参见下面的链接)

#Install pyenv
brew update
brew install pyenv

假设您在 Mac 上使用 python 3.6作为主版本:

python --version

产出:

Python <your current version>

Now Install python 3.7, first list all

pyenv install -l

让我们看看3.7。3:

pyenv install 3.7.3

确保在终端中运行这个命令(将它添加到 ~/. bashrc 或 ~/. zhrc) :

export PYENV_ROOT="$HOME/.pyenv"
export PATH="$PYENV_ROOT/bin:$PATH"
eval "$(pyenv init --path)"

现在让我们只在打开的 终端/外壳上运行它:

pyenv shell 3.7.3

快跑

python --version

产出:

Python 3.7.3

同样重要的是 没有在打开的 shell/iTerm 中:

pyenv shell --unset

你也可以运行 全球范围内或者 本地

包管理器-用户级

对于可以安装和管理多个版本的 python 的包管理器来说,以下是不错的选择:

  • Pyenv -只能安装和管理 python 版本
  • Asdf -能够安装和管理许多不同的语言

The advantages to these package managers is that it may be easier to set them up and install multiple versions of python with them than it is to install python from source. They also provide commands for easily changing the available python version(s) using shims and setting the python version per-directory.

这个缺点是,默认情况下,它们安装在用户级(在您的主目录中) ,并且需要一点用户级配置——您需要编辑您的 ~/.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 源代码版本页面中的清单。

/usr/local/src中下载并解压缩文件,用 python 版本(即 3.8.2)替换下面的 X.X.X

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文档)。这对于一般用途来说通常是不必要的,但是,举例来说,如果你想用这个 python 版本创建一个 uWSGI 插件,你可能需要设置标志 -fPIC,用下面的代码:

export CFLAGS='-fPIC'

将工作目录更改为解压缩的 python 源目录,并配置构建。您可能希望在 剖面引导优化./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 构建文档的 这一页警告。

make -j 4
make altinstall

然后,您应该能够使用 pythonX.XpipX.X(即 python3.8pip3.8)运行新的 python 和 pip 版本。注意,如果新安装的次要版本与操作系统的版本相同(例如,如果您正在安装 python3.8.4,而操作系统使用 python3.8.2) ,那么您需要指定整个路径(/usr/local/bin/pythonX.X)或设置一个别名来使用这个版本。

希望通过另一种方式来实现这一点,即在系统默认值旁边安装其他版本的 Python。如果您只需要一个特定项目的 Python 的其他版本,那么它是轻量级的。它使用的是死蛇 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

Side note - I did try the popular 'pyenv', but found that it was doing too much in the bashrc/profile, and was slowing down shell prompt. Also, installations of new Python versions were very slow as it was compiling each version. pyenv is probably better if you need to switch between Python versions a lot for many projects.

我建议使用 [强烈]阴部[强烈]。它是一个 python 版本管理器,可以帮助您在同一台计算机上管理 Python 的多个版本。

Fedora Linux-简单地从软件包安装

也许值得注意的是,Fedora 发行版包含了不是 EOL 版本的旧版本 Python,我发现它非常方便。

例如,在最近的 Fedora 35(2021年秋)中,缺省 Python 是3.10,但是您也可以安装3.6、3.7、3.8和3.9。

这些包装被描述为:

面向开发人员的 Python 3.X 包。

此包的存在是为了允许开发人员根据较早的 这不是一个完整的 Python 堆栈,如果您希望运行 您使用 Python3. 编写的应用程序,请参阅其他发行版 它支持它,比如一个较旧的 Fedora 版本。

例如,要安装3.7作为已安装的 Python (shell command line, as root or with 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