我如何在main.py模块(大概)中告诉Python使用哪个解释器?我的意思是:如果我想让特定脚本使用Python版本3解释整个程序,该怎么办?
奖励:这将如何影响virtualenv?我是否在想,如果我为程序创建一个virtualenv然后告诉它使用其他版本的Python,那么我可能会遇到一些冲突吗?
Answers:
您可以在脚本顶部添加一个shebang行:
#!/usr/bin/env python2.7
但这仅在以时执行./my_program.py
。
如果您以方式执行python my_program.py
,则将which python
使用返回的任何Python版本。
在re:to virtualenv中使用:virtualenv -p /usr/bin/python3.2
或进行任何设置以使用该Python可执行文件。
install.py
?
也许与您的要求不完全相同,但是我发现将其放在程序开始时很有用:
import sys
if sys.version_info[0] < 3:
raise Exception("Python 3 or a more recent version is required.")
print "hello world"
编译。我认为只是印刷声明本身发生了变化,因此我感到困惑。感谢您澄清说这对所有版本的Python都适用,因为这很重要。
我将使用shebang #!/usr/bin/python
(代码的第一行)和末尾的Python序列号;)
然后,例如./main.py
从命令行(而不是从命令行)将Python文件作为脚本运行python main.py
。
要从Linux命令行运行Python时,情况相同。
python <python-file>
从终端运行)来执行脚本,则此方法将无效。
当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中,非virtualenv方式将是使用一个批处理文件来设置环境,并通过在python.exe前面加上其所驻留的路径来调用特定的Python可执行文件。这种方式将提供其他详细信息尽管管理 例如,如果您希望控制台在应用程序退出后仍然存在,则对“开始”或“ cmd.exe”命令使用命令行参数来“保存并替换“控制台”环境”。
您的问题使我相信您有几个Python模块,每个模块都需要特定版本的Python。通过具有使用子过程模块的启动模块,这可以在脚本“内部”解决。除了调用mymodule.py之外,您还可以调用一个调用您的模块的模块。也许launch_mymodule.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)
我还没有测试。
con
是您实际上必须为要测试的每个Python版本编写一个自定义python脚本。这与使用脚本的首选python版本的OP不同。
您无法在Python程序中执行此操作,因为如果您使用shebang行,则shell会决定要使用哪个版本。
如果您不使用带shebang行的shell,而只是键入python myprogram.py
它会使用默认版本,除非您在键入pythonXXX myprogram.py
要使用的版本时明确决定要使用哪个Python版本。
Python程序运行后,您已经决定使用哪个Python可执行文件来使程序运行。
virtualenv
是用于隔离python版本和环境的,它专门用于消除冲突。
在我的程序开始时将其完全用于python
import sys
if sys.version_info[0] < 3:
raise Exception("Python 3 or a more recent version is required.")
这段代码将有助于进度
我遇到了这个问题,只是决定将其中一个程序从python.exe重命名为python2.7.exe。现在,我可以在命令提示符下指定哪个程序可以轻松运行,而无需引入任何脚本或更改环境路径。所以我有两个程序:python2.7和python(后者是v.3.8 aka default)。