我正在使用Python 3.4.3和tkinter为项目创建一个应用程序,因为这是我最强大和最流利的语言。但是,对于规范来说,最终用户更有意义编译好的应用程序。有没有办法编译Python(非常确定没有)或一种方法来获得C ++或任何其他编译语言来运行Python脚本?相当广泛的问题(对不起),任何提示和技巧都会有用。
答案 0 :(得分:3)
我的理解是,您想要的是以单个(Windows?)可执行文件结束,您可以将其发送给最终用户以简化部署。
对于仅使用有限且已知的模块集的脚本是可能的(并且很容易),SourceForge上甚至有一个很好的工具专用于它:py2exe(以下内容摘自教程)。
您只需准备一个setup.py
脚本(当使用命令行UI简化原始脚本时):
from distutils.core import setup
import py2exe
setup(console=['myscript.py'])
并运行python setup.py py2exe
只要您使用GUI和许多模块,即使doc认为tkinter正确处理,事情也会变得更加困难。
答案 1 :(得分: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)
答案 2 :(得分:1)