将 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 脚本使用的模块。 确实pyinstaller
或py2exe
是非常好的开始方式;没有要编写的 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 脚本作为可执行文件的最佳方法?的主要内容,如果未能解决你的问题,请参考以下文章