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

2025-04-16 08:56:00
admin
原创
43
摘要:问题描述:在 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大政策解读一、信创国产化的背景与意义信创国产化,即信息技术应用创新国产化,是当前中国信息技术领域的一个重要发展方向。其核心在于通过自主研发和创新,实现信息技术应用的自主可控,减少对外部技术的依赖,并规避潜在的技术制裁和风险。随着全球信息技术竞争的加剧,以及某些国家对中国在科技领域的打压,信创国产化显...
工程项目管理   3949  
  为什么项目管理通常仍然耗时且低效?您是否还在反复更新电子表格、淹没在便利贴中并参加每周更新会议?这确实是耗费时间和精力。借助软件工具的帮助,您可以一目了然地全面了解您的项目。如今,国内外有足够多优秀的项目管理软件可以帮助您掌控每个项目。什么是项目管理软件?项目管理软件是广泛行业用于项目规划、资源分配和调度的软件。它使项...
项目管理软件   2735  
  本文介绍了以下10款项目管理软件工具:禅道项目管理软件、Freshdesk、ClickUp、nTask、Hubstaff、Plutio、Productive、Targa、Bonsai、Wrike。在当今快速变化的商业环境中,项目管理已成为企业成功的关键因素之一。然而,许多企业在项目管理过程中面临着诸多痛点,如任务分配不...
项目管理系统   74  
  本文介绍了以下10款项目管理软件工具:禅道项目管理软件、Monday、TeamGantt、Filestage、Chanty、Visor、Smartsheet、Productive、Quire、Planview。在当今快速变化的商业环境中,项目管理已成为企业成功的关键因素之一。然而,许多项目经理和团队在管理复杂项目时,常...
开源项目管理工具   82  
  本文介绍了以下10款项目管理软件工具:禅道项目管理软件、Smartsheet、GanttPRO、Backlog、Visor、ResourceGuru、Productive、Xebrio、Hive、Quire。在当今快节奏的商业环境中,项目管理已成为企业成功的关键因素之一。然而,许多企业在选择项目管理工具时常常面临困惑:...
项目管理系统   68  
热门文章
项目管理软件有哪些?
曾咪二维码

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

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

云端的项目管理软件

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

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

内置subversion和git源码管理

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

免费试用