如何告诉 Python 脚本使用特定版本

2025-04-16 08:56:00
admin
原创
14
摘要:问题描述:在 main.py 模块中,我该如何告诉 Python 使用哪个解释器?我的意思是:如果我想让某个脚本使用 Python 3 版本来解释整个程序,我该怎么做?补充:这会对虚拟环境产生什么影响?我的想法是对的吗?如果我为我的程序创建一个虚拟环境,然后告诉它使用不同版本的 Python,那么我可能会遇到...

问题描述:

在 main.py 模块中,我该如何告诉 Python 使用哪个解释器?我的意思是:如果我想让某个脚本使用 Python 3 版本来解释整个程序,我该怎么做?

补充:这会对虚拟环境产生什么影响?我的想法是对的吗?如果我为我的程序创建一个虚拟环境,然后告诉它使用不同版本的 Python,那么我可能会遇到一些冲突。


解决方案 1:

您可以在脚本顶部添加一行 shebang:

#!/usr/bin/env python2.7

但这仅在执行时才有效./my_program.py

如果您执行为,那么将使用返回python my_program.py的任何 Python 版本。which python

在回复中:对虚拟环境使用:virtualenv -p /usr/bin/python3.2或任何设置来使用该 Python 可执行文件。

解决方案 2:

也许不完全是您所要求的,但我发现将其放在程序开始时很有用:

import sys

if sys.version_info[0] < 3:
    raise Exception("Python 3 or a more recent version is required.")

解决方案 3:

我会使用shebang #!/usr/bin/python(第一行代码)并在末尾添加 Python 的序列号

然后将 Python 文件作为脚本运行,例如./main.py从命令行运行,而不是python main.py

当您想从 Linux 命令行运行 Python 时也是一样的。

解决方案 4:

虽然楼主可能在Nix 平台上工作,但这个答案应该对非Nix 平台有帮助。我还没有在 Microsoft Windows 上体验过 Shebang 方法。

重新表述:shebang 行回答了你关于“在我的脚本中”的问题,但我认为它只适用于类 Unix 平台。实际上,在脚本之外,Unix Shell 会解释 shebang 行以确定要调用哪个版本的 Python 解释器。我不确定,但我认为该解决方案无法解决 Microsoft Windows 平台用户的问题。

在 Microsoft Windows 世界中,运行特定 Python 版本的简化方法无需为安装的每个特定 Python 版本专门设置环境变量,只需在前面加上python.exe要运行它的路径即可,例如C:Python25python.exe mymodule.pyD:Python27python.exe mymodule.py

但是,您需要考虑PYTHONPATH和其他 PYTHON... 环境变量,它们会指向错误版本的 Python 库。

例如,您可以运行:

C:Python2.5.2python.exe mymodule

然而,环境变量可能指向错误的版本,例如:

PYTHONPATH = D:Python27

PYTHONLIB = D:Python27lib

充满恐怖乐趣!

因此,在 Windows 中,一种非虚拟环境的方法是使用批处理文件来设置环境,并通过python.exe在其所在路径前添加前缀来调用特定的 Python 可执行文件。不过,这种方法还有一些其他细节需要您处理;例如,如果您希望控制台在应用程序退出后仍然保留,则需要使用“start”或“cmd.exe”命令的命令行参数来“保存并替换‘控制台’环境”。

你的问题让我怀疑你有几个 Python 模块,每个模块都需要特定版本的 Python。这个问题或许可以在脚本内部解决,方法是创建一个使用subprocess模块的启动模块。与其调用mymodule.py你,不如调用一个调用你模块的模块;或许launch_mymodule.py

启动我的模块.py
import sys
import subprocess
if sys.argv[2] == '272':
  env272 = {
    'PYTHONPATH': 'blabla',
    'PYTHONLIB': 'blabla', }
  launch272 = subprocess.Popen('D:\\Python272\\python.exe mymodule.py', env=env272)

if sys.argv[1] == '252'
  env252 = {
    'PYTHONPATH': 'blabla',
    'PYTHONLIB': 'blabla', }
  launch252 = subprocess.Popen('C:\\Python252\\python.exe mymodule.py', env=env252)

我还没有测试过这个。

解决方案 5:

对于那些使用 pyenv 来控制他们的虚拟环境的人,我发现这可以在脚本中起作用:

#!/home/<user>/.pyenv/versions/<virt_name>/bin/python

DO_STUFF

解决方案 6:

.python-version或者pyproject.toml

我相信,总有一天我们会标准化实现这一点的方法。但现在,只需将这些信息放入您选择的 Python 版本选择器的标准版本设置机制中即可。

pyenv具有可以使用以下命令创建的.python-version文件:

pyenv local 3.8.0

该文件仅包含字符串3.8.0。然后,用户可以使用以下命令启用该特定的 Python 版本:

pyenv local

在Python Poetry中你可以添加到你的pyproject.toml

[tool.poetry.dependencies]
python = "~2.7 || ^3.2"  # Compatible python versions must be declared here

或者更糟糕的情况是,只是在 README 中说它,直到标准到来。

#!/usr/bin/env python无版本 Shebang的优势

像这样的次要版本号设置#!/usr/bin/env python3.7可能不是一个好主意,因为你的项目通常会在一系列 Python 版本上运行,例如,在 上可以指定pyproject.toml。所以,如果你指定了 python3.7,而其他人使用的是 3.8,那么它将无法运行,即使主版本号(理论上)应该兼容向后兼容(不过我相信过去也见过这种情况)。

使用特定主版本 Shebang 的#!/usr/bin/env python3缺点是,如果你的项目中有 50 个 Shebang,那么信息就会到处重复,所以更新需要所有 Shebang。最好只保留 Python 版本管理器系统指向 Python 的符号链接。

也许用主版本号来区分 Python 2 和 Python 3 并非完全不合理,因为它可以让这些文件无需修改就能在少数发行版上运行。但最终,我感觉发行版自己制作 Python 软件包的补丁或包装器在某种程度上是不可避免的,因为没有哪个发行版能够让所有软件包都兼容其特定 Python 版本,所以在大多数情况下,保持原样是一种优雅的做法#!/usr/bin/env python

解决方案 7:

您无法在 Python 程序中执行此操作,因为如果您使用 shebang 行,shell 会决定使用哪个版本。

如果您没有使用带有 shebang 行的 shell,而只是输入python myprogram.py它,则它会使用默认版本,除非您在输入时具体决定pythonXXX myprogram.py要使用哪个 Python 版本。

一旦你的 Python 程序运行起来,你就已经决定使用哪个 Python 可执行文件来运行该程序。

virtualenv用于隔离python版本和环境,它专门用于消除冲突。

解决方案 8:

我遇到了这个问题,刚刚决定将其中一个程序从 python.exe 重命名为 python2.7.exe。现在我可以在命令提示符下轻松指定要运行哪个程序,而无需引入任何脚本或更改环境路径。所以我有两个程序:python2.7 和 python(后者是 v.3.8,也就是默认程序)。

解决方案 9:

在 Windows 上使用不同版本的 Python 时,

我正在使用此方法在版本之间切换。

我认为这比弄乱shebangs和virtualenvs要好

  1. 安装你想要的 Python 版本

  2. 转到环境变量> PATH

(我假设 python 版本的路径已经添加到 Env.Vars.>PATH)

  1. 抑制所有你不想使用的 Python 版本的路径

(不要删除路径,只需添加后缀,如“_sup”)

  1. 从终端调用 python

(因此 Windows 将跳过您更改的错误路径,并将在您未抑制的路径上找到 python.exe,并在之后使用此版本)

  1. 通过后缀切换版本

相关推荐
  政府信创国产化的10大政策解读一、信创国产化的背景与意义信创国产化,即信息技术应用创新国产化,是当前中国信息技术领域的一个重要发展方向。其核心在于通过自主研发和创新,实现信息技术应用的自主可控,减少对外部技术的依赖,并规避潜在的技术制裁和风险。随着全球信息技术竞争的加剧,以及某些国家对中国在科技领域的打压,信创国产化显...
工程项目管理   2482  
  为什么项目管理通常仍然耗时且低效?您是否还在反复更新电子表格、淹没在便利贴中并参加每周更新会议?这确实是耗费时间和精力。借助软件工具的帮助,您可以一目了然地全面了解您的项目。如今,国内外有足够多优秀的项目管理软件可以帮助您掌控每个项目。什么是项目管理软件?项目管理软件是广泛行业用于项目规划、资源分配和调度的软件。它使项...
项目管理软件   1533  
  PLM(产品生命周期管理)项目对于企业优化产品研发流程、提升产品质量以及增强市场竞争力具有至关重要的意义。然而,在项目推进过程中,范围蔓延是一个常见且棘手的问题,它可能导致项目进度延迟、成本超支以及质量下降等一系列不良后果。因此,有效避免PLM项目范围蔓延成为项目成功的关键因素之一。以下将详细阐述三大管控策略,助力企业...
plm系统   0  
  PLM(产品生命周期管理)项目管理在企业产品研发与管理过程中扮演着至关重要的角色。随着市场竞争的加剧和产品复杂度的提升,PLM项目面临着诸多风险。准确量化风险优先级并采取有效措施应对,是确保项目成功的关键。五维评估矩阵作为一种有效的风险评估工具,能帮助项目管理者全面、系统地评估风险,为决策提供有力支持。五维评估矩阵概述...
免费plm软件   0  
  引言PLM(产品生命周期管理)开发流程对于企业产品的全生命周期管控至关重要。它涵盖了从产品概念设计到退役的各个阶段,直接影响着产品质量、开发周期以及企业的市场竞争力。在当今快速发展的科技环境下,客户对产品质量的要求日益提高,市场竞争也愈发激烈,这就使得优化PLM开发流程成为企业的必然选择。缺陷管理工具和六西格玛方法作为...
plm产品全生命周期管理   0  
热门文章
项目管理软件有哪些?
曾咪二维码

扫码咨询,免费领取项目管理大礼包!

云禅道AD
禅道项目管理软件

云端的项目管理软件

尊享禅道项目软件收费版功能

无需维护,随时随地协同办公

内置subversion和git源码管理

每天备份,随时转为私有部署

免费试用