Shebang用于编译Python代码

Tak*_*kol 2 python shebang

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

#!/usr/bin/python
...
Run Code Online (Sandbox Code Playgroud)

我可以执行my.py文件,

chmod a+r my.py
./my.py
Run Code Online (Sandbox Code Playgroud)

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

python my.pyc
Run Code Online (Sandbox Code Playgroud)

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

./my.pyc
Run Code Online (Sandbox Code Playgroud)

Ste*_*ppo 5

Shebang仅适用于文本脚本,而不适用于二进制文件.然而,您可以使用直接binfmt_misc执行*.pyc文件,如此Python ML线程中所报告的:

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)
Run Code Online (Sandbox Code Playgroud)

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

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

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