Run pyc file without specifying python path ?
Barak, Ron
Ron.Barak at lsi.com
Thu Jul 30 10:47:37 EDT 2009
> -----Original Message-----
> From: Dave Angel [mailto:davea at dejaviewphoto.com]
> Sent: Thursday, July 30, 2009 16:03
> To: Barak, Ron
> Cc: 'Dave Angel'; 'python-list at python.org'
> Subject: RE: Run pyc file without specifying python path ?
>
> Barak, Ron wrote:
> >> -----Original Message-----
> >> From: Dave Angel [mailto:davea at ieee.org]
> >> Sent: Wednesday, July 29, 2009 21:05
> >> To: Barak, Ron
> >> Cc: 'python-list at python.org'
> >> Subject: Re: Run pyc file without specifying python path ?
> >>
> >> Barak, Ron wrote:
> >>
> >>> Hi,
> >>>
> >>> I wanted to make a python byte-code file executable,
> >>>
> >> expecting to be able to run it without specifying "python" on the
> >> (Linux bash) command line.
> >>
> >>> So, I wrote the following:
> >>>
> >>> [root at VMLinux1 python]# cat test_pyc.py #!/usr/bin/env python
> >>>
> >>> print "hello"
> >>> [root at VMLinux1 python]#
> >>>
> >>> and made its pyc file executable:
> >>>
> >>> [root at VMLinux1 python]# ls -ls test_pyc.pyc
> >>> 4 -rwxr-xr-x 1 root root 106 Jul 29 14:22 test_pyc.pyc
> >>> [root at VMLinux1 python]#
> >>>
> >>> So, I see:
> >>>
> >>> [root at VMLinux1 python]# file test_pyc.py*
> >>> test_pyc.py: a python script text executable
> >>> test_pyc.pyc: python 2.3 byte-compiled
> >>> [root at VMLinux1 python]#
> >>>
> >>> If I try to do the following, no problem:
> >>>
> >>> [root at VMLinux1 python]# python test_pyc.pyc hello
> >>> [root at VMLinux1 python]#
> >>>
> >>> However, the following fails:
> >>>
> >>> [root at VMLinux1 python]# ./test_pyc.pyc
> >>> -bash: ./test_pyc.pyc: cannot execute binary file
> >>> [root at VMLinux1 python]#
> >>>
> >>> Is there a way to run a pyc file without specifying the
> >>>
> >> python path ?
> >>
> >>> Bye,
> >>> Ron.
> >>>
> >>>
> >>>
> >> I don't currently run Unix, but I think I know the problem.
> >>
> >> In a text file, the shell examines the first line, and if
> it begins
> >> #!
> >> it's assumed to point to the executable of an interpreter for that
> >> text file. Presumably the same trick doesn't work for a .pyc file.
> >>
> >> Why not write a trivial wrapper.py file, don't compile it, and let
> >> that invoke the main code in the .pyc file?
> >>
> >> Then make wrapper.py executable, and you're ready to go.
> >>
> >> DaveA
> >>
> >>
> >>
> >
> > Hi Dave,
> > Your solution sort of defeats my intended purpose (sorry
> for not divulging my 'hidden agenda').
> > I wanted my application to "hide" the fact that it's a
> python script, and look as much as possible like it's a
> compiled program.
> > The reason I don't just give my user a py file, is that I
> don't want a cleaver user to change the innards of the script.
> > On the other hand, I don't want to make a compiled
> (freezed?) version of the application, because it'll grow the
> resulting file significantly, and I don't have the experience
> to know how it will run on different Linuxes.
> > Bye,
> > Ron.
> >
Hi Dave,
> Most of the other answers basically paraphrased my suggestion
> of making a wrapper file, not compiling it, and making it
> executable. With that
> approach, the user just types "wrapper.py" on his command line.
>
> And wrapper.py only needs two lines, a shebang, and an
> import, no big deal if the user modifies it. The rest of
> your code can be .pyc files.
>
> Steven makes some good points. You have to define what level
> of clever you're protecting from. A determined hacker will
The clever I try to guard against is not at hacker level, just the curios worker.
> get in no matter what you do, unless you want to ship the
> program in a proprietary embedded system, encased in epoxy.
> Further, if you have an extension of .py or .pyc, a
> knowledgeable hacker will know it's probably python.
Granted, but the user will know that from the user manual anyway :-)
>
> You imply you want it to run unmodifed on multiple unknown
> Linux versions. I think that lets out binfmt solutions.
Actually, no: I know the set of Linuxes my users are likely to have.
> That means you need to test and support not only multiple
> Linux implementations, but multiple Python versions, because
> who knows what the user may have installed. I think you need
> to rethink your support strategy. And maybe concentrate on
> being able to detect change, rather than prevent it.
>
> DaveA
>
>
Thanks for the helpful suggestions.
Ron.
More information about the Python-list
mailing list