Шебанг для скомпилированного кода Python
Я использовал, чтобы добавить строку Shebang в верхней части скрипта Python, как,
#!/usr/bin/python
...
И я могу выполнить файл my.py,
chmod a+r my.py
./my.py
Но после компиляции в байт-код сценарий может быть выполнен только на python, и shebang больше не работает.
python my.pyc
Есть ли способ сделать Shebang работоспособным для скомпилированного скрипта Python?
./my.pyc
3 ответа
Шебанг работает только для текстовых скриптов, а не для двоичных файлов. Тем не менее, вы можете использовать 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)
один раз в вашей системе Linux (или, скорее, во время загрузки), и все pyc-файлы становятся исполняемыми (если установлен бит x).
В Debian установка пакета binfmt-support сделает это за вас.
(мой акцент, обратите внимание, что это будет применяться ко всем производным Debian, включая Ubuntu. То же решение работает и в Fedora).
Нет. Но вы можете использовать другие специфичные для ОС механизмы для вызова произвольных исполняемых файлов, например, binfmt_misc.
Вот обновленная версия ответа Стефано Санфилиппо на 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)