我如何在main.py模块(可能)中告诉Python使用哪个解释器?我的意思是:如果我想让一个特定的脚本使用Python的第3版来解释整个程序,我该怎么做?
奖励:这对virtualenv有何影响?我是否正确地认为如果我为我的程序创建virtualenv然后告诉它使用不同版本的Python,那么我可能会遇到一些冲突?
答案 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
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)。