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

时间:2012-06-23 15:46:23

标签: python version virtualenv

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

奖励:这对virtualenv有何影响?我是否正确地认为如果我为我的程序创建virtualenv然后告诉它使用不同版本的Python,那么我可能会遇到一些冲突?

9 个答案:

答案 0 :(得分:39)

你可以将脚本放在脚本的顶行,但这只能在执行./my_program.py时起作用。

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

在re:to virtualenv中使用:virtualenv -p /usr/bin/python3.2或任何设置它以使用该Python可执行文件。

答案 1 :(得分:37)

也许不完全是你问的问题,但我觉得这对于我的程序开头是有用的:

import sys

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

答案 2 :(得分:16)

我会在最后使用shebang #!/usr/bin/python(第一行代码)和Python的序列号;)

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

答案 3 :(得分:12)

虽然OP可能正在* nix平台上运行,但这个答案可以帮助非* nix平台。我没有在Microsoft Windows中体验过shebang方法。

改述:shebang系列回答你的问题“在我的剧本中”,但我相信只有类似Unix的平台。即使它是在脚本之外的Unix shell,它实际上解释了shebang行来确定要调用哪个版本的Python解释器。我不确定,但我相信该解决方案无法解决Microsoft Windows平台用户的问题。

在Microsoft Windows世界中,简化运行特定Python版本的方式,没有专门为每个特定版本的Python安装环境变量,只需在 python.exe 前加上要运行它的路径,例如 C:\ Python25 \ python.exe mymodule.py D:\ Python27 \ python.exe mymodule.py

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

例如,您可以运行: C:\ Python2.5.2 \ python.exe mymodule

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

PYTHONPATH = D:\ Python27

PYTHONLIB = D:\ Python27 \ lib

充满了可怕的乐趣!

因此,在Windows中,非虚拟化的方法是使用批处理文件来设置环境,并通过在 python.exe 前面加上它所在的路径来调用特定的Python可执行文件这种方式有你需要管理的其他细节;例如,如果您希望控制台在应用程序退出后继续使用,请使用“start”或“cmd.exe”命令的命令行参数来“保存并替换”控制台“环境”。

您的问题让我相信您有几个Python模块,每个模块都期望某个版本的Python。这可能通过使用子进程模块的启动模块在脚本内“解决”。而不是调用 mymodule.py ,而是调用一个调用模块的模块;也许 launch_mymodule.py

launch_mymodule.py

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)

我没有测试过这个。

答案 4 :(得分:1)

你不能在Python程序中这样做,因为如果你是一个shebang行,shell决定使用哪个版本。

如果您没有使用带有shebang行的shell而只是键入python myprogram.py,那么它将使用默认版本,除非您在键入pythonXXX myprogram.py要使用的版本时明确决定使用哪个Python版本。

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

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

答案 5 :(得分:0)

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

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

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

1)安装所需的python版本

2)转到环境变量>路径

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

3)取消所有您不想使用的python版本的路径

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

4)从终端

调用python

(因此Windows将跳过您更改的错误路径, 并会在您未压缩的路径中找到python.exe, 并将在以后使用该版本)

5)通过使用后缀来切换版本

答案 6 :(得分:0)

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

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

DO_STUFF

答案 7 :(得分:-1)

在我的程序开始时将其完全用于python

import sys

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

此代码将完全帮助您完成进度

答案 8 :(得分:-1)

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