如何创建一个无需本地Python安装即可嵌入和运行Python代码的应用?
你好,软件开发者们。
我想要发布一个可以通过嵌入Python解释器来脚本化的C程序。
这个C程序使用了Py_Initialize、PyImport_Import等函数来实现Python的嵌入。
我希望只分发以下几个部分:
- 我的程序可执行文件及其库
- Python库(dll/so文件)
- 一个ZIP文件,里面包含所有必要的Python模块和库。
我该如何做到这一点?有没有详细的步骤可以参考?
这个解决方案应该适用于Windows和Linux系统。
提前谢谢大家。
7 个回答
1
你有没有看看 Portable Python 呢?这个工具不需要安装任何东西。你只需要把里面的文件复制到你的电脑上,就可以使用这个解释器了。
补充一下:这个方法只适用于Windows系统。
6
我简单地在一台没有安装Python的电脑上测试了我的可执行文件,结果它能正常工作。
当你把Python链接到你的可执行文件上(无论是动态链接还是静态链接),你的可执行文件就会自动获得基本的Python语言功能,比如运算符、方法,以及一些基本的数据结构,比如字符串、列表、元组和字典等等,而不需要其他任何依赖。
接着,我让Python的setup.py通过 python setup.py sdist --format=zip
来编译一个Python源代码分发包,这样我得到了一个我命名为 pylib-2.6.4.zip
的ZIP文件。
我接下来的步骤是:
char pycmd[1000]; // temporary buffer for forged Python script lines
...
Py_NoSiteFlag=1;
Py_SetProgramName(argv[0]);
Py_SetPythonHome(directoryWhereMyOwnPythonScriptsReside);
Py_InitializeEx(0);
// forge Python command to set the lookup path
// add the zipped Python distribution library to the search path as well
snprintf(
pycmd,
sizeof(pycmd),
"import sys; sys.path = ['%s/pylib-2.6.4.zip','%s']",
applicationDirectory,
directoryWhereMyOwnPythonScriptsReside
);
// ... and execute
PyRun_SimpleString(pycmd);
// now all succeeding Python import calls should be able to
// find the other modules, especially those in the zipped library
...
6
你有没有看过Python的官方文档呢?这里有个链接:将Python嵌入到其他应用程序中。
还有IBM的一份很不错的PDF文件:在C应用程序中嵌入Python脚本。
你可以通过这两个资源实现你想要的功能。