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

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

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

你可以在脚本的最上面一行,但只能在./my_program.py中执行。

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

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

也许不完全是你问的,但我觉得这是有用的,把我的scheme开始:

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

我将在末尾使用带有Python序列号的shebang #!/usr/bin/python (第一行代码);)

当您想从Linux命令行运行Python时,情况也是如此。

虽然OP可能在* nix平台上工作,这个答案可以帮助非* nix平台。 我没有经历过Microsoft Windows中的shebang方法工作。

改编:shebang行回答你的问题“ 在我的脚本 ”,但我相信只有类Unix的平台。 即使它是Unixshell,在脚本之外,它实际上解释了shebang行以确定要调用哪个版本的Python解释器。 我不确定,但我相信该解决scheme不能解决Microsoft Windows平台用户的问题。

在Microsoft Windows环境中,简化运行特定Python版本的方法,不需要为每个安装的特定版本的Python专门设置环境variables,只需将python.exe加上你想运行的path前缀,比如C:\ Python25 \ python.exe mymodule.pyD:\ Python27 \ python.exe mymodule.py

但是,您需要考虑指向Python库版本错误的PYTHONPATH和其他PYTHON …环境variables。

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

然而,环境variables可能会指向错误的版本:

PYTHONPATH = D:\ Python27

PYTHONLIB = D:\ Python27 \ lib

可怕的乐趣!

因此,Windows中的非virtualenv方法是使用一个batch file来设置环境,并通过在它所在的path前面加上python.exe的前缀来调用一个特定的Python可执行文件。这种方式有额外的细节尽pipe; 例如,如果希望控制台在应用程序退出后继续执行,则可以使用“start”或“cmd.exe”命令的命令行参数来“保存并replace”控制台“环境”。

你的问题使我相信你有几个Python模块,每个模块都需要一个特定版本的Python。 通过启动使用subprocess模块的启动模块,可以在脚本内“解决”这个问题。 不要调用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) 

我没有testing过这个。

您不能在Python程序中执行此操作,因为如果您使用了shebang行,shell将决定使用哪个版本。

如果你没有使用shebang行的shell,只需键入python myprogram.py它将使用默认的版本,除非当你inputpythonXXX myprogram.py来决定使用哪个Python版本。

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

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