官方多个Python版本在同一台机器上?

And*_*yuk 70 python

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

我可以找到大量的博客帖子和答案,但我想知道是否有"标准"官方方式这样做?

或者这完全取决于操作系统?

Fel*_*ing 68

我认为它是完全独立的.只需安装它们,然后你就可以使用命令/usr/bin/python2.5/usr/bin/python2.6.链接/usr/bin/python到您要用作默认值的链接.

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

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

安装多个版本

在Unix和Mac系统上,如果您打算使用相同的安装前缀(configure脚本的--prefix参数)安装多个版本的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是主要版本,则可以在2.6 build目录中执行"make install",在其他目录中执行"make altinstall".

  • 谢谢,主要的"make install"和次要的"make altinstall"表明了这一点. (4认同)
  • 在版本之间共享库的任何正确方法?假设我有2.7的MySQLdb,然后安装2.7.如何使MySQLdb也可用于2.7? (4认同)

小智 24

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

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

这允许我输入pythonpython3在我的.bat Python包装器中启动我想要的那个.

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

  • 这就是我放在python.bat文件中的内容(只有一行):"c:\ python27\python%*"然后我只是正常调用它,即'python test.py',%*将获取所有参数并将其传递给实际的可执行文件.您也可以直接在C:\ bin文件夹中使用mklink.有关详细信息,请参阅此处:http://stackoverflow.com/a/13953614/865929 (5认同)
  • 现在,您只需运行“py -3.4”或“py -2.7”,程序“py”(在“C:\Windows”下)将选择该 python 解释器(假设已安装)。 (3认同)
  • 用户不再存在,我真的想要那个批处理文件 (2认同)

Rot*_*eti 15

2019 年更新:使用 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
Run Code Online (Sandbox Code Playgroud)

旧答案:从源代码安装 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
Run Code Online (Sandbox Code Playgroud)

2) 下载并解压所需的 Python 版本

将 Linux 的 Python 源下载为 tarball 并将其移动到/usr/src.

将下载的包解压到位。(用您下载的版本替换“x”)

$ sudo tar xzf Python-x.x.x.tgz
Run Code Online (Sandbox Code Playgroud)

3)编译安装Python源码

$ cd Python-x.x.x
$ sudo ./configure
$ sudo make altinstall
Run Code Online (Sandbox Code Playgroud)

您的新 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)
Run Code Online (Sandbox Code Playgroud)


blu*_*cat 11

包管理器 - 用户级

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

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

这些包管理器的优点是,设置它们并使用它们安装多个版本的 python 可能比从源代码安装 python 更容易。它们还提供了使用 shims 轻松更改可用 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
Run Code Online (Sandbox Code Playgroud)

选择您要安装的 python 版本。请参阅Python 源代码发布页面以获取列表。

下载并解压 中的文件/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
Run Code Online (Sandbox Code Playgroud)

在构建和安装之前,请CFLAGS使用必要的 C 编译器标志设置环境变量(请参阅 GNUmake文档)。这对于一般用途来说通常是不必要的,但是,例如,如果您要使用此 python 版本创建一个 uWSGI 插件,您可能需要-fPIC使用以下内容设置标志 :

export CFLAGS='-fPIC'
Run Code Online (Sandbox Code Playgroud)

将工作目录更改为解压后的 python 源目录,并配置构建。您可能需要使用命令--enable-optimizations上的选项./configure进行配置文件引导优化。用于--prefix=/usr/local安装到正确的子目录(/usr/local/bin/usr/local/lib等)。

cd Python-X.X.X
./configure --enable-optimizations --prefix=/usr/local
Run Code Online (Sandbox Code Playgroud)

构建项目并make安装,make altinstall以避免在安装多个版本时覆盖任何文件。请参阅python 构建文档此页上的警告。

make -j 4
make altinstall
Run Code Online (Sandbox Code Playgroud)

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


Koh*_*001 7

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

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

#Install pyenv
brew update
brew install pyenv
Run Code Online (Sandbox Code Playgroud)

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

python --version 
Run Code Online (Sandbox Code Playgroud)

输出:

Python <your current version>
Run Code Online (Sandbox Code Playgroud)

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

pyenv install -l
Run Code Online (Sandbox Code Playgroud)

让我们以 3.7.3 为例:

pyenv install 3.7.3
Run Code Online (Sandbox Code Playgroud)

确保在终端中运行它(将它添加到 ~/.bashrc 或 ~/.zshrc):

export PYENV_ROOT="$HOME/.pyenv"
export PATH="$PYENV_ROOT/bin:$PATH"
eval "$(pyenv init --path)"
Run Code Online (Sandbox Code Playgroud)

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

pyenv shell 3.7.3
Run Code Online (Sandbox Code Playgroud)

现在运行

python --version
Run Code Online (Sandbox Code Playgroud)

输出:

Python 3.7.3
Run Code Online (Sandbox Code Playgroud)

同样重要的是在打开的 shell/iTerm 中取消设置它:

pyenv shell --unset
Run Code Online (Sandbox Code Playgroud)

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


Rod*_*gue 5

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

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