繁体   English   中英

将python程序转换为可执行文件

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM