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

jes*_*uis 66 python version virtualenv

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

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

Gra*_*ave 45

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

import sys

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

  • 正是我在寻找什么. (5认同)

Jon*_*nts 43

你可以直接在脚本的顶行排成行,但这只能在执行./my_program.py时起作用.

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

在re:to virtualenv中使用:virtualenv -p /usr/bin/python3.2或者设置它来使用Python可执行文件.

  • 为了使这个答案完整,可能值得描述适当的she-bang语法,因为问题的措辞不会暗示知识. (8认同)

And*_*rew 17

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

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

  • 所以,如果我想要python 2.7.3,我会使用#!/ usr/bin/python2.7.3 (7认同)
  • 请注意,如果您像通常在运行 python 脚本时那样执行脚本,这将不起作用,即通过从终端运行`python &lt;python-file&gt;`。 (2认同)

Dev*_*yer 13

虽然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.pyD:\ 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)
Run Code Online (Sandbox Code Playgroud)

我没有测试过这个.