Shebang用于编译Python代码

时间:2014-02-17 10:01:39

标签: python shebang

我曾经在Python脚本的顶部添加shebang行,

#!/usr/bin/python
...

我可以执行my.py文件,

chmod a+r my.py
./my.py

但是在编译成字节码之后,脚本只能由python执行,并且shebang不再起作用了。

python my.pyc

有没有让shebang可以编译python脚本?

./my.pyc

3 个答案:

答案 0 :(得分:5)

Shebang仅适用于文本脚本,而不适用于二进制文件。不过,您可以使用binfmt_misc直接执行*.pyc个文件,如this Python ML thread中所述:

  

Linux,您可以使用binfmt_misc从pyc代码中生成可执行文件。运行:

import imp,sys,string
magic = string.join(["\\x%.2x" % ord(c) for c in imp.get_magic()],"") 
reg = ':pyc:M::%s::%s:' % (magic, sys.executable) 
open("/proc/sys/fs/binfmt_misc/register","wb").write(reg)
     

一旦在您的Linux系统上(或者更确切地说,在启动时),以及所有pyc   文件变为可执行文件(如果设置了x位)。

     

在Debian中,安装binfmt-support软件包将为您完成。

(重点是我的,请注意这将适用于所有Debian衍生产品,包括Ubuntu。同样的解决方案也适用于Fedora。)

答案 1 :(得分:0)

没有。但是您可以使用其他特定于操作系统的机制来调用任意可执行文件,例如binfmt_misc

答案 2 :(得分:0)

这是Stefano Sanfilippo's答案的更新python 3版本:

import imp,sys,string
magic = "".join(["\\x%.2x" % c for c in imp.get_magic()])
reg = ':pyc:M::%s::%s:' % (magic, sys.executable) 
open("/proc/sys/fs/binfmt_misc/register","w").write(reg)