我曾经在Python脚本的顶部添加shebang行,
#!/usr/bin/python
...
我可以执行my.py文件,
chmod a+r my.py
./my.py
但是在编译成字节码之后,脚本只能由python执行,并且shebang不再起作用了。
python my.pyc
有没有让shebang可以编译python脚本?
./my.pyc
答案 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)