run python module without the pyc extension
I have a compi开发者_运维百科led Python 2.6 program on Linux called abc.pyc. If I run
./abc.pyc
it runs fine. However if I rename it to abc (i.e, without the pyc extension) it fails to run. It gives the error message:
ImportError: No module named abc
How can I run my program without the .pyc extension?
UPDATED: I want to run the compiled (pyc) version not the py version
Alternatively, I know I can compile modules to .so files using Cython, but can I compile my main Python program to something I can execute on a Linux platform? If so, a Cython command line example would be appreciated.
UPDATED I've raised the Cython question as a separate question.
Create a file named 'abc' which contains:
#!/bin/sh
/usr/bin/env python -m abc
or is that giving away too much valuable source code if they can read that?
Note also that .pyc files aren't portable between different versions of Python. Redistributing the source really would be best for that reason quite apart from causing less annoyance to your users and less cost to yourself (in support time if nothing else).
Don't rename the .pyc
file - that is just a shortcut for the interpreter, so that it doesn't have to recompile already compiled code.
Instead, rename the .py
file to abc
, chmod +x ./abc
and make sure the first line reads:
#!/usr/bin/python
or even
#!/usr/bin/env python
From your explanation of the problem, I guess the .pyc
file contains some linux loadable code that lets it be run as a binary, providing it can check the .py
file for newer versions - and probably just starts the python interpreter to load itself or the source file (whichever is newer) and then go on with that. Who knows? Maybe the os specific docs will tell you. Maybe they won't.
If you're looking to obfuscate your code, see this discussion on protecting Python code. Basically, you can't wantonly distribute the Python bytecode which comprises the .pyc
file, and there's no way to prevent people from peeking into your code.
精彩评论