我曾经在Python脚本的顶部添加过shebang行,如下所示:
#!/usr/bin/python
...
我可以通过以下方式执行my.py文件:
chmod a+r my.py
./my.py
但是,在编译成字节码后,脚本只能由Python执行,并且shebang不再起作用。
python my.pyc
有没有办法让 shebang 对编译后的 Python 脚本起作用?
./my.pyc
Shebang只针对文本脚本起作用,不适用于二进制文件。然而,你可以使用binfmt_misc
直接执行*.pyc
文件,正如这个Python ML线程所报告的:
(强调是我的,注意这将适用于所有Debian衍生版,包括Ubuntu。相同的解决方案也适用于Fedora。)Linux, you can use binfmt_misc to make executables out of pyc code. Run:
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)
once on your Linux system (or, rather, at boot time), and all pyc files become executable (if the x bit is set).
In Debian, installing the binfmt-support package will do that for you.
这是Stefano Sanfilippo答案的更新版本,使用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)
importlib.util.MAGIC_NUMBER
是 imp
的新替代品。 - Marcin
.pyc
文件,为什么要这样做? - Thomas Orozco