将 Python 脚本作为可执行文件的最佳方法?

Posted

技术标签:

【中文标题】将 Python 脚本作为可执行文件的最佳方法?【英文标题】:Best way to get Python script as an executable file? 【发布时间】:2015-11-19 15:22:07 【问题描述】:

我正在为一个项目使用 Python 3.4.3 和 tkinter 创建一个应用程序,因为这是我最擅长和最流利的语言。但是,对于规范,最终用户拥有一个更有意义的编译的应用程序运行。有什么方法可以编译 Python(很确定没有)或获取 C++ 或任何其他编译语言来运行 Python 脚本?相当广泛的问题(抱歉),任何提示和技巧都会很有用。

【问题讨论】:

是的,C++ 程序可以调用 python 脚本。最简单的方法是使用popen()。请参阅:***.com/questions/16962430/…。 如果唯一的目标是将python代码变成可执行文件,你可以使用pyinstaller之类的东西。 如果需要也可以嵌入 Python 解释器,查看文档:docs.python.org/2/extending/embedding.html 您可能会考虑的另一件事是将问题转为正轨:您可以使用boost python 之类的方式将您的 c++ 代码公开为 python API。 【参考方案1】:

我的理解是,您希望以单个(Windows ?)可执行文件结束,您可以将其发送给最终用户以简化部署。

对于只使用有限且已知的一组模块的脚本来说,这是可能的(而且很容易),SourceForge 上甚至有一个专门用于它的好工具:py2exe(以下摘自教程)。

您只需准备一个setup.py 脚本(当原始脚本使用命令行 UI 非常简单时):

from distutils.core import setup
import py2exe

setup(console=['myscript.py'])

然后运行python setup.py py2exe

一旦您使用 GUI 和许多模块,事情就会变得更加困难,即使 doc 认为 tkinter 似乎已正确处理。

【讨论】:

很抱歉,这只是提示,但 py2exe 通常需要配置,而配置取决于 python 脚本使用的模块。 确实pyinstallerpy2exe 是非常好的开始方式;没有要编写的 C++ 代码,不确定这是否是 OP 要求的,但也可以访问运行时。【参考方案2】:

我过去所做的是使用 Python C API 来加载 Python 模块、调用一些方法并将值转换回 C 类型。请参阅此处的文档:https://docs.python.org/3.4//c-api/index.html

我无法在此处提供详细信息(阅读文档),但这是一个非常基本的示例(我是在头脑中这样做的,所以我的示例中可能存在问题,它省略了所有错误检查)

// first you would have to load the module
Py_Initialize();
PyObject *module = PyImport_ImportModule(module_name);

// you would want to do some error checking to make sure the module was actually loaded

// load the module dictionary
PyObject *module_dict = PyModule_GetDict(module);

// call the constructor to create an instance
PyObject *constructor = PyDict_GetItemString(module_dict, "ClassName");
PyObject *instance = PyObject_CallObject(constructor, NULL);
Py_DECREF(constructor);

// call a method that takes two integer arguments
PyObject *result = PyObject_CallMethod(instance, "method_name", "ii", 5, 10);

// let's pretend the result is an integer
long log_val = PyInt_AsLong(result)

【讨论】:

【参考方案3】:

我用过Nuitka,它真的很有魅力。 Nuitka 将 python 代码翻译成 C++ 并编译它,创建一个可执行文件。您可以告诉 Nuitka 必须编译 Python 代码的哪一部分:只编译您的代码、您的代码和一些库,或者所有内容,包括与 Python 解释器链接以获得独立的可执行文件。

Cython 也很好用(尽管我在派生类中使用 de super 函数时尝试了一些问题)。在这种情况下,您需要解释器。

【讨论】:

以上是关于将 Python 脚本作为可执行文件的最佳方法?的主要内容,如果未能解决你的问题,请参考以下文章

将python脚本打包为exe可执行文件

将Python脚本封装成exe可执行文件 转

如何将python脚本编译为二进制可执行文件

为 *nix 创建 Python 可执行文件 [重复]

如何将 Python 脚本封装成可执行文件

将Python脚本打包成可执行文件