如何在Windows中安装多个版本的Python?

Rea*_*oob 3 python

直到最近,我只使用过一种版本的 Python,并且时不时地使用虚拟环境。现在,我正在使用一些需要旧版本 Python 的库。所以,我很困惑。有人可以澄清我的一些困惑吗?

  1. 如何安装多个Python版本?

我最初使用的是 Python 3.8.x 版本,但上个月升级到了 3.10.x。目前我的电脑上只有该版本。

我想安装 Python 3.8.x 版本之一,并转到https://www.python.org/downloads/。它列出了很多版本和颠覆,例如 3.6、3.7、3.8 等,其中包括 3.8.1、3.8.2 直到 3.8.13。我应该选择哪一个?

我实际上继续使用 3.8.12 并在页面上下载了 Tarball:https ://www.python.org/downloads/release/python-3812/

我提取了 tarball (23.6MB),它创建了一个包含 setup.py 文件的文件夹。

现在安装Python 3.8.12了吗?单击该setup.py文件只会使终端闪烁一秒钟。

我还有几个问题。希望他们不会让我投反对票。我只是很困惑,无法为他们找到正确的答案。

  1. 为什么 Python 对库和包等的确切版本有如此严重的依赖性?

例如,这个问题 如何在 Windows 系统上使用 CUDA 运行 Mozilla TTS/Coqui TTS 训练?。这看起来对初学者很不友好。软件包版本稍微不匹配可能会阻止任何程序运行。

  1. 虚拟环境是否从主 Python 安装中复制所有文件来创建虚拟环境,然后在其中安装特定的包?因为几乎所有项目都需要自己的虚拟环境,这不是浪费大量资源吗?

Gri*_*mar 5

您的问题有点取决于“所有其他软件”。例如,正如 @leiyang 所指出的,如果您仅在普通 CPython(标准 Windows Python)上使用condavs ,答案将会有所不同。pip

我还将假设您实际上使用的是 Windows,因为在 Linux 上我建议查看pyenv. 有一个pyenv-win,可能值得研究,但我自己不使用它,因为如果您也想要(mini)conda环境,它就不会那么好用。

1. (a) 如何安装多个Python版本?

只需下载各种安装程序并将其安装在合适的位置即可。例如,Python 3.9 的“C:\Program Files\Python39”,或允许您安装软件的其他位置。

不过,不要让 Python 将自身添加到 PATH 中,因为那样只会找到最后一个版本,而且确实会造成混乱。

此外,您可能希望一致地使用虚拟环境,因为这将特定项目非常清晰地与特定 Python 版本联系起来,避免将来出现混乱或问题。

1. (b) “3.8.1、3.8.2 至 3.8.13”我应该选择哪一个?

始终选择最新的 3.xy,因此如果有适用于 Windows 的 3.8.13,但没有 3.8.14,请选择该版本。检查该版本是否确实适用于您的操作系统,有时一个操作系统有更高版本,但另一个操作系统则没有。

原因是在 3.6 和 3.7 这样的版本之间,可能会发生一些重大变化,从而改变 Python 的工作方式。一般来说,会有向后兼容性,但某些更改可能会破坏某些软件包的工作方式。然而,当升级到次要版本时,不会有任何此类重大更改,只会进行不妨碍现有内容的修复和添加。从 2.x 到 3.x 的变化只有在语言本身经历重大变化时才会发生,而且很少发生(也许永远不会再发生,这取决于你问的是谁)。

当然,“无次要版本更改问题”的一个例外是,如果您运行的某些脚本非常具体地依赖于 3.8.6 中已损坏的内容,但在 3.8.7+ 中未修复(作为示例)。然而,这是非常糟糕的编码,依赖于损坏的部分而不是稍后修复它,所以只有在没有其他追索权的情况下才同意这种做法。否则,只是您想要的任何版本的最新次要版本。

另外:确保选择正确的架构。如果没有特定要求,只需选择 64 位,但如果您的脚本需要在二进制级别与其他已安装的软件进行交互,则可能需要您安装 32 位 Python(以及 32 位软件包)。如果您没有这样的要求,64 位允许更多的内存访问,并且在现代计算机上还有一些其他好处。

2. 为什么Python对库和包等的确切版本有如此严重的依赖?

不仅仅是Python,很多语言都是如此。对于 Python 的最终用户来说,它更加可见,因为您将其作为解释语言运行。它仅在运行它的计算机上的最后一刻进行编译。

这样做的优点是代码可以在各种计算机和操作系统上运行,但缺点是您需要正确的运行环境。对于使用 C++ 等语言进行编码的人来说,他们在编码时必须处理这个问题,但目标环境要少得多(尽管仍然需要应对运行时和 DirectX 版本等)。其他语言只是将所有内容都汇总到正在分发的程序中,而 Python 脚本本身可能很小。这是一个设计选择。

有很多工具可以帮助您自动化该过程,并且编写良好的软件包将使该过程变得非常轻松。如果您觉得 Python 在这方面非常不稳定,那可能是您正在使用的包或脚本造成的,而不是真正的语言。该语言唯一的缺点是,它让开发人员很容易把你搞得一团糟,并让你的生活因满足特定需求而变得困难。

寻找替代方案,但如果您无法避免使用特定的脚本或包,一旦您弄清楚如何安装或使用它,请将其记录下来,或者更好的是,将其自动化,这样您就不必再次考虑它。

3. 虚拟环境是否会复制主 Python 安装中的所有文件来创建虚拟环境,然后在其中安装特定的包?因为几乎所有项目都需要自己的虚拟环境,这不是浪费大量资源吗?

不是全部,但是相当一部分。但是,您仍然需要系统上存在原始安装。此外,如果不进行一些仔细的更改(通常最好重新创建它),您无法选择虚拟环境并将其放在其他地方,甚至不能放在同一台 PC 上。

你说得对,这有点浪费——但这是一个艰难的选择。

要么Python会更加复杂,必须在一个环境中管理许多不同版本的包(Java开发人员将能够通过他们的依赖管理告诉你关于这个的战争故事——或者一旦他们自己掌握了它,就可以抒情地讲述它)。

或者你得到我们所拥有的:有点浪费,但最终磁盘空间比你的时间便宜得多。与您的时代不同,磁盘空间几乎可以无限扩展。

不过,您可以在非常相似的项目之间共享虚拟环境,但特别是如果您从其他人那里获得代码,最好不必担心,只需为该项目放弃几十 MB 的空间即可。好的方面是:您只需删除虚拟环境目录即可,这样几乎就可以摆脱所有内容。像 PyCharm 这样的一些应用程序可能会记得它曾经存在过,但除此之外,虚拟环境已经消失了。