【问题标题】:Multiple Python versions on the same machine?同一台机器上有多个 Python 版本?
【发布时间】:2010-03-30 18:19:35
【问题描述】:

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

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

或者这一切都依赖于操作系统?

【问题讨论】:

    标签: python


    【解决方案1】:

    我认为它是完全独立的。只需安装它们,然后你就有了命令,例如/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”。

    【讨论】:

    • 谢谢,主要的“make install”和次要的“make altinstall”清楚了。
    • 在版本之间共享库的任何正确方法?假设我有 2.6 的 MySQLdb,然后安装了 2.7。如何使 MySQLdb 也可用于 2.7?
    • 您提供的所有信息都是针对 Unix/Linux 和 Mac OS 的,因此显然不像 OP 所要求的那样“完全独立于”操作系统。对于 Windows,此过程完全不同,但同样简单。
    【解决方案2】:

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

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

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

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

    【讨论】:

    • 在这些 .bat 文件中添加什么?
    • 不会赞成这个答案,只是因为它是特定于 Windows 的,而且问题与 Linux 相关,否则信息很好。
    • 用户不存在了,我很想要那个批处理文件
    • 这是我放入 python.bat 文件的内容(只有一行):"c:\python27\python %*" 然后我只是正常调用它,即 'python test.py' 和%* 将获取所有参数并将其传递给实际的可执行文件。您也可以直接在 C:\bin 文件夹中使用 mklink。详情见这里:*.com/a/13953614/865929
    • 现在您可以运行py -3.4py -2.7 程序py(在C:\Windows 下)将选择该python 解释器(假设已安装)。
    【解决方案3】:

    2019 年更新:使用 asdf

    这些天我建议使用asdf 将各种版本的 Python 解释器安装在一起。

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

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

    如果您有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 / 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)
    

    【讨论】:

    【解决方案4】:

    我使用的是 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 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
    

    您也可以运行它globallylocally

    【讨论】:

      【解决方案5】:

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

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

      【讨论】:

      • 我已经用 configure/make altinstall 在 Mac 上安装了。到目前为止没有问题。
      • 是否可以给$user1 另一个python 版本而不是默认版本?
      • @Roland pyenv 将为此工作。从上面发布的链接中的自述文件中:> [让]您根据每个用户更改全局 Python 版本。
      【解决方案6】:

      包管理器 - 用户级

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

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

      这些包管理器的优点是,与从源代码安装 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.XpipX.X(即python3.8pip3.8)运行新的python 和pip 版本。请注意,如果新安装的次要版本与操作系统的版本相同(例如,如果您正在安装 python3.8.4 并且操作系统使用 python3.8.2),那么您需要指定整个路径 (/usr/local/bin/pythonX.X)或者设置一个别名来使用这个版本。

      【讨论】:

        【解决方案7】:

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

        因此,基本上,无论您以何种方式安装版本,只要您将安装分开,您就可以单独运行它们。

        【讨论】:

        • 什么是包分发系统?
        • @drozzy:例如 OpenSuse 使用的 RPM 或基于 Debian 的发行版使用的 apt 或 Gentoo 使用的 portage 等。基本上它是一个安装软件的工具。
        【解决方案8】:

        我用 anaconda 导航器做到了这一点。我安装了anaconda navigator并创建了两个不同的python版本的开发环境

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

        先安装anaconda navigator,再创建环境。

        在此处查看有关如何管理环境的帮助

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

        这是使用 conda 完成的视频

        https://youtu.be/EGaw6VXV3GI

        【讨论】:

          【解决方案9】:

          我建议使用pyenv。它是一个python版本管理器,可以帮助你在同一台机器上管理多个python版本。

          【讨论】:

            【解决方案10】:

            想用另一种方式来做到这一点,即在系统默认设置的同时安装其他版本的 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 可能会更好。

            【讨论】:

              【解决方案11】:

              Fedora Linux - 只需从软件包安装

              可能值得注意的是,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
              

              【讨论】:

                最近更新 更多