【问题标题】:Multiple Python versions on the same machine?同一台机器上的多个 Python 版本?
【发布时间】:2022-12-04 00:52:16
【问题描述】:

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

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

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

【问题讨论】:

    标签: python


    【解决方案1】:

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

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

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

    安装多个版本

    在 Unix 和 Mac 系统上,如果你打算安装多个版本的 Python 使用相同的安装前缀(配置的--prefix参数 脚本)你必须注意你的主要 python 可执行文件不是 被不同版本的安装覆盖。所有文件和 使用“make altinstall”安装的目录包含 major 和 minor 版本,因此可以并存。 “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:python27python %*" 然后我只是正常调用它,即 'python test.py' 和 %* 将获取所有参数并传递给它到实际的可执行文件。您也可以直接在 C:in 文件夹中使用 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

    如果您需要安装多个版本的 Python(在主版本旁边)Ubuntu/薄荷:(在其他 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 版本

    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 可能更容易。它们还提供了使用垫片轻松更改可用 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 navigator 做了这个。我安装了 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
              

              【讨论】:

                最近更新 更多