我经常看到这个在.py
文件顶部:任何不显式使用/ usr/bin/env python2/python3的理由?
#!/usr/bin/env python
随着OS默认的未知状态,我不知道为什么它不是:
#!/usr/bin/env python2
#!/usr/bin/env python3
如果大多数操作系统提供这种版本的符号链接,那会更好吗?
我发现PEP 394而环顾四周,其中规定,目前,开发商应该假设python -> python2 -> python2.x
。它也指出,可以假定存在版本化的等价物,python3
和python2
。那么不是会带来什么危害,并提供额外的特性?
如果一个人没有安装python2
因为OS船舶默认使用python -> python3
(如Arch Linux的),我更运行一个脚本或程序时喜欢这个问题:
/usr/bin/env: ‘python2’: No such file or directory
或者,这误差会比较大,特别是对于新用户(python
存在,它只是错误的版本):
File "<stdin>", line 1
print 'Hello world'
^
SyntaxError: Missing parentheses in call to 'print'
这么说,我觉得最后者更常见。至少现在我知道一些典型的兼容性错误,足以让我自己思考“哦,对,它是符号链接python
。”
两个问题问如何指定/验证所需的版本:
This 2010 question暗示治疗
python
的意思python2
并根据需要显式调用了python3
python3
。This 2013 question:也许意味着
python3
不应该使用,因为不是所有的发行版都附带它?
是否有一个明显的原因,我(或python
程序员)不应使用版本env
呼叫如果大多数操作系统提供的呢?仅仅使用python
似乎迎合了那些没有版本控制的少数派,同时也给绝大多数人造成混乱。
也许答案是使用版本化的命令(我从PEP 394得到的),但没有足够的时间看到它们出现。到目前为止,我从来没有见过版本号为env
的电话...然后,如果它有效,我永远不会看。如果它打破了,它总是一个无版本python
行,所以我的心理计数可能是倾斜的!
一些github的搜索统计信息;我很好奇,就用法:
#!/usr/bin/env python2
:〜210K的Python文件中的代码打#!/usr/bin/env python3
:〜460K#!/usr/bin/env python
:〜600万
这可能意味着,大多数代码是足够大如果上述问题的建议是普遍的智慧,那么人们还没有更新他们的文件?
我看着这些流行的操作系统,并发现他们都使用版本控制命令:
- Ubuntu的:python-minimal和python3-minimal
- 弓:python和python2
- Fedora的:python2和python3
- debian:与ubuntu相同的名称/状态
- various来源suggest是OS X版本uses命令
- 窗口:当你写剧本,我认为there's evidence Windows已版本可用
如果你的代码与Python2/3兼容,你可以使用'#!/ usr/bin/env python'。但我认为这是一个非常少量的代码。它大部分是来自Python 3之前的遗产,包括仍然建议使用'/ usr/bin/env python'的教程等,而没有警告后果。 – Evert
fwiw,在Windows **上python的默认安装不符合pep394--它只是提供了'python.exe'和'pythonw.exe' –
@Evert当然,在我写这个之后,我明白了:)我想我刚刚看到一个例子,用一些'import __future__'的东西,现在有道理。非常有效的是,如果你写了兼容的代码,你不需要关心。 – Hendy