Executable standalone *.pyc after inserting "#!/usr/bin/python" or other options

Martin v. Loewis martin at v.loewis.de
Thu Jan 14 17:33:05 EST 2010


> I've been playing with "Lua" and found something really cool that I'm
> unable to do in "Python". With "Lua", a script can be compiled to byte
> code using "luac" and by adding "#!/usr/bin/lua" at the top of the
> binary, the byte code becomes a single file executable. After I found
> this trick, I ran back to "Python" to give it a try.  Well...  it
> didn't work. Is this possible?

In Python, a different approach will work, depending on the operating
system.

E.g. on 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.

Do "ls /proc/sys/fs/binfmt_misc/" to see what binary types are
already supported on your system.

HTH,
Martin

P.S. The approach you present for Lua indeed does not work for
Python.



More information about the Python-list mailing list