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


87

Python网站上是否有官方文档,内容涉及如何在Linux的同一台计算机上安装和运行多个版本的Python?

我可以找到成千上万的博客文章和答案,但是我想知道是否有“标准”的官方方式来做到这一点?

还是全部取决于操作系统?

Answers:


79

我认为这是完全独立的。只需安装它们,然后即可使用命令例如/usr/bin/python2.5/usr/bin/python2.6。链接/usr/bin/python到您要用作默认值的那个。

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

如果要手动编译版本,则来自Python源代码的自述文件:

安装多个版本

在Unix和Mac系统上,如果要使用相同的安装前缀(配置脚本的--prefix参数)安装多个版本的Python,则必须注意主要的python可执行文件不会被其他版本的安装覆盖。使用“ make altinstall”安装的所有文件和目录都包含主要版本和次要版本,因此可以并行存在。“ make install”还会创建$ {prefix} / bin / python3,它引用了$ {prefix} /bin/pythonX.Y。如果打算使用相同的前缀安装多个版本,则必须确定哪个版本(如果有)是您的“主要”版本。使用“进行安装”安装该版本。使用“ make altinstall”安装所有其他版本。

例如,如果要以2.6为主要版本安装Python 2.5、2.6和3.0,则可以在2.6构建目录中执行“ make install”,在其他构建目录中执行“ make altinstall”。


5
谢谢,在主服务器上的“ make install”和在辅助服务器上的“ make altinstall”使它很清楚。
2010年

4
在版本之间共享库的任何正确方法?假设我有适用于2.6的MySQLdb,然后安装了2.7。如何使MySQLdb也可用于2.7?
romeroqj 2011年

您提供的所有信息都是针对Unix / Linux和Mac OS的,因此显然不像OP所要求的那样“完全独立”于OS。对于Windows,此过程非常不同,但同样容易。
wwwayne

28

在Windows上,它们安装到单独的文件夹“ C:\ python26”和“ C:\ python31”,但是可执行文件具有相同的“ python.exe”名称。

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

这使我可以在.bat Python包装器中键入pythonpython3启动所需的包装器。

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


在这些.bat文件中添加什么?
艾迪斯2014年

仅因为它是Windows特定的并且问题与Linux有关,否则就不会赞成这个答案。
Jim Aho 2015年

2
用户不再存在,我真的想要该批处理文件
Wargog,2016年

6
这是我放入python.bat文件中的内容(仅一行):“ c:\ python27 \ python%*”然后,我通常正常调用它,即'python test.py',而%*将获取所有参数并将其传递给实际的可执行文件。您也可以直接在C:\ bin文件夹中使用mklink。详情请参阅:stackoverflow.com/a/13953614/865929
肖恩·格洛弗

1
现在,您可以运行py -3.4py -2.7,程序py(在下方C:\Windows)将选择该python解释器(假设已安装)。
JamesThomasMoon1979 '19

12

更新2019:使用 asdf

这些天,我建议使用asdf并排安装各种版本的Python解释器。

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

注意2:asdf与流行的包管理器(例如pipenvpoetry)结合使用时效果很好。

如果已安装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上安装多个版本的Python(主要版本旁边):(应该在其他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版本

将Linux的Python Source下载为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容器现在位于中/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)

6

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

但是,如果您使用的是Linux,则可以使用pythonbrewpythonz之类的工具来帮助您轻松管理和在不同版本之间进行切换。


我已经在Mac上使用configure / make altinstall进行了安装。到目前为止没有问题。
Evgeny

是否可以提供$user1另一个默认版本以外的python版本?
罗兰

1
@Rolandpyenv将为此工作。从上面发布的链接的自述文件中:> [Lets],您可以按用户更改全局Python版本。
theeddieh

5

我正在使用Mac,而对我有用的最好方法是使用pyenv!

以下命令适用于Mac,但与Linux非常相似(请参见下面的链接)

#Install pyenv
brew update
brew install pyenv

假设您在Mac上将python 3.6作为主要版本:

python --version 

输出:

Python <your current version>

现在安装python 3.7,首先列出所有

pyenv install -l

让我们以3.7.3为例:

pyenv install 3.7.3

确保在终端中运行此命令(将其添加到〜/ .bashrc或〜/ .zshrc):

export PATH="/Users/username/.pyenv:$PATH"
eval "$(pyenv init -)"

现在,仅在打开的终端/外壳上运行它:

pyenv shell 3.7.3

现在运行

python --version

输出:

Python 3.7.3

同样重要的是,在打开的shell / iTerm中将其取消设置

pyenv shell --unset

你可以运行它在全球本地以及


1

程序包管理器-用户级

对于可以安装和管理多个版本的python的软件包管理器,这些是不错的选择:

  • pyenv-仅能安装和管理python版本
  • asdf-能够安装和管理许多不同的语言

这些软件包管理器的优点在于,与从源代码安装python相比,使用它们安装和安装多个版本的python可能更容易。它们还提供了一些命令,这些命令可使用垫片轻松更改可用的python版本,并按目录设置python版本。

缺点是,默认情况下,它们安装在用户级别(位于主目录中),并且需要一些用户级别的配置-您需要编辑您的~/.profile和/~/.bashrc或类似文件。这意味着要使用它们为所有用户全局安装多个python版本并不容易。为此,您可以从源代码安装操作系统的现有python版本。


从源安装-系统范围

您需要此方法的root特权。

有关其他注意事项和选项,请参见官方python文档以从源代码进行构建

/usr/local是系统管理员安装共享(系统范​​围内)软件的指定位置,因此它的子目录是下载python源代码并进行安装的好地方。请参阅Linux Foundation的文件层级标准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 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

在构建和安装之前,请CFLAGS使用必要的C编译器标志设置环境变量(请参阅GNUmake文档)。通常,这对于一般用途而言不是必需的,但是例如,如果您要使用此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

使用Build项目进行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)或设置一个别名以使用此版本。


0

它很大程度上取决于您使用的软件包分发系统。例如,使用MacPorts,您可以安装多个Python程序包,并使用该pyselect实用程序在它们之间轻松切换默认值。在任何时候,您都可以通过提供完整路径来调用不同的Python解释器,并且可以通过提供所有路径来链接所有Python库和标头。

因此,基本上,无论采用哪种方式安装版本,只要将安装分开,就可以分别运行它们。


什么是包裹分发系统?
Andriy Drozdyuk,2010年

@drozzy:例如OpenSuse使用的RPM或基于Debian的发行版使用的apt或Gentoo等使用的portage。基本上,它是安装软件的工具。
菲利克斯·克林

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.