[英]cx_Freeze not correctly converting python program(s) into executable
[英]converting python program into executable
所以现在,我有了一个python程序,希望将其转换为可执行文件(最好是单个文件)。 现在,目标系统只有RedHat(和CentOS)和Debian(和Ubuntu)。
首先,我尝试了PyInstaller,但是运行它之后,它将创建一个.spec文件和2个名为build和dist的文件夹。 我不知道如何从那里继续。
其次,我尝试了python附带的freeze.py。 我了解用法如下:
python /path/to/freeze.py /path/to/myfile.py
这将引发错误***Test Failed*** 2 failures
并且NameError: name 'testdata' is not defined
完整错误如下:
**********************************************************************
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.
我想要使用这两种工具(或其他任何可以帮助我达到相同结果的工具)的帮助。
谢谢。
如果要使其可执行,则必须chmod +x /path/to/script.py
。 这样,任何人都可以运行该文件。 然后,您可以python /path/to/script.py
。
您仍然需要使用python启动命令,这很丑陋。 如果将此行#!/usr/bin/env python
到脚本的第一行。 这被称为“ shebang”或“ hashbang”。 然后(仍然记得对其进行chmod修改),您可以/path/to/script.py
它将执行。
如果您已经在脚本目录中,则可以./script.py
。 (仍然记得将其chmod并在shebang上)
如果您仍然不满意,并且只想输入脚本名称 ,就可以将脚本移到路径上的一个文件夹中(可以通过在shell中键入echo $PATH
找到该文件夹,通常是/ usr /,/ bin /,/ usr / local / bin或类似名称)。 如果将脚本移动到其中一个文件夹中,则只需script.py
。 如果执行此操作,建议您删除.py扩展名,因此只需键入script
。 至少在调用时,这将使它看起来与其他unix shell命令(ls,grep,cat)相似。
您可能希望调查Nuitka 。 它需要python源代码并将其转换为C ++ API调用。 然后将其编译为可执行二进制文件(在Linux上为ELF)。 它已经存在了几年,并且支持多种Python版本。
如果使用它,您可能还会获得性能上的改进。 推荐的。
对pyinstaller.py
使用-F
标志将创建一个可执行文件,并将其放入dist/
目录。
pyinstaller.py --help
显示一长串选项。
pyinstaller-XX/doc
目录包含HTML和PDF的完整手册。
您可以尝试使用cython将其转换为ac可执行文件
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.