So now, I have a python program which I would like to convert into an executable(preferably a single file). Right now the target systems are only RedHat(and CentOS) and Debian(and Ubuntu).
First, I've tried the PyInstaller but after running it, it creates a .spec file and 2 folders called build and dist. I have no idea how to proceed from there.
Second, I tried the freeze.py which ships with python. I understand the usage is as follows:
python /path/to/freeze.py /path/to/myfile.py
This throws an error ***Test Failed*** 2 failures
and NameError: name 'testdata' is not defined
The full error is as follows:
**********************************************************************
File "/usr/lib/python2.6/site-packages/freeze.py", line 117, in __main__.freeze
Failed example:
testdata = json.loads(
gzip.open("testdata.json.gz", "r").read().decode()
)
Exception raised:
Traceback (most recent call last):
File "/usr/lib64/python2.6/doctest.py", line 1253, in __run
compileflags, 1) in test.globs
File "<doctest __main__.freeze[3]>", line 2, in <module>
gzip.open("testdata.json.gz", "r").read().decode()
File "/usr/lib64/python2.6/gzip.py", line 33, in open
return GzipFile(filename, mode, compresslevel)
File "/usr/lib64/python2.6/gzip.py", line 79, in __init__
fileobj = self.myfileobj = __builtin__.open(filename, mode or 'rb')
IOError: [Errno 2] No such file or directory: 'testdata.json.gz'
**********************************************************************
File "/usr/lib/python2.6/site-packages/freeze.py", line 121, in __main__.freeze
Failed example:
freeze(testdata) == freeze_fast(testdata)
Exception raised:
Traceback (most recent call last):
File "/usr/lib64/python2.6/doctest.py", line 1253, in __run
compileflags, 1) in test.globs
File "<doctest __main__.freeze[4]>", line 1, in <module>
freeze(testdata) == freeze_fast(testdata)
NameError: name 'testdata' is not defined
**********************************************************************
1 items had failures:
2 of 8 in __main__.freeze
***Test Failed*** 2 failures.
I'd like some help to using either of the 2 (or any other tool which will help me achieve the same result).
Thanks.
If you want to make it executable, you have to chmod +x /path/to/script.py
. This gives anybody permission to run the file. Then you can python /path/to/script.py
.
You still need to start the command with python, that is ugly. If you add this line #!/usr/bin/env python
to the first line of your script. This is callled a shebang or a hashbang. Then (still remember to chmod it) you can /path/to/script.py
and it will execute.
If you are already in the directory of your script you can ./script.py
. (still remember to chmod it and at a shebang)
If you still aren't satisfied, and you want to type in just the name of your script , you move the script into one of the folders on your path (which you can find by typing echo $PATH
in shell, typically this is /usr/, /bin/, /usr/local/bin, or something like that). If you move your script into one of those folders, then you can just script.py
. If you do this, I recommend you drop the .py extension, so you can just type in script
. This will kind of make look like other unix shell commands (ls, grep, cat) at least in its invocation.
You might wish to investigate Nuitka . It takes python source code and converts it in to C++ API calls. Then it compiles into an executable binary (ELF on Linux). It has been around for a few years now and supports a wide range of Python versions.
You will probably also get a performance improvement if you use it. Recommended.
Using the -F
flag to pyinstaller.py
will create a single, executable file and drop it into the dist/
directory.
pyinstaller.py --help
shows a long list of options.
The pyinstaller-XX/doc
directory has the full manual in HTML and PDF.
您可以尝试使用cython将其转换为ac可执行文件
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.