Python 2.7的Shebang行

17

我在我的Linux Centos系统中安装了Python2.7,而系统默认自带Python2.6版本。

默认Python

[root@linuxhost PythonProjects]# python -V
Python 2.6.6

默认Python2.7

[root@linuxhost PythonProjects]# python2.7 -V
Python 2.7.3

现在我需要基于Python2.7版本编写程序... 针对Python2.7的shebang行应该是什么?

另外,我该如何使用Python2.7进行编译?


可能是重复问题 https://dev59.com/5VjUa4cB1Zd3GeqPWPfh (最合适的答案 → https://dev59.com/5VjUa4cB1Zd3GeqPWPfh#6600414)? - Nadir Sampaoli
3个回答

21

Shebang将是:

#!/usr/bin/env python2.7

我不确定为什么您想编译Python文件(当您导入它们时,Python会自动完成此操作)。

如果您确实想这样做:

python2.7 -m compileall .

这个命令将在当前目录编译 .py 文件为 .pyc 文件:


我的意思是 - 如何运行程序...现在,我使用./[filename].py运行文件...但我该如何指向2.7版本来运行? - user1050619
你可以使用 python2.7 filename.py 命令来运行 Python 2.7 版本的脚本,或者在 filename.py 文件的开头添加 shebang 行。 - Nigel Tufnel

0

我认为仅有一个sheebang行是不够的。

你可以尝试加入

#! /usr/bin/env python2.7

不过,对你来说真正一致的事情是使用virtualenv创建虚拟Python环境。

请查看http://www.virtualenv.org/en/latest/virtualenv.html - 否则,您将冒着在2.7 Python上运行代码但尝试加载python 2.6模块和库以及更糟糕的情况的风险。

此外,在系统中拥有两个相同主版本的Python的建议是将两者保留在不同的前缀中,例如系统中的/usr和另一个/opt(/usr/local不足以实现清晰分离)。


0

你可以将shebang更改为#!/usr/bin/env python2.7

或者你可以使用环境模块,让shebang为#!/usr/bin/env python。当你加载python 2.7模块(可以是默认的),脚本将以python 2.7运行,当你加载python 2.6模块时,脚本将以python 2.6运行。

在这个盒子上,我安装了python 2.6和2.7。根据加载的模块,选择运行所选版本的python。库、模块和包始终为正确的版本加载。

$ cat t.py 
#!/bin/env python
import sys
print(sys.version)
$ ./t.py 
2.6.6 (r266:84292, Jul 10 2013, 22:48:45) 
[GCC 4.4.7 20120313 (Red Hat 4.4.7-3)]
$ module load python/2.7.3 
$ ./t.py 
2.7.3 (default, Nov  7 2012, 16:29:59) 
[GCC 4.7.2]
$ 

你也可以像@jsbueno建议的那样使用virtualenv


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接