如何创建一个无需本地Python安装即可嵌入和运行Python代码的应用?

11 投票
7 回答
5955 浏览
提问于 2025-04-15 20:42

你好,软件开发者们。

我想要发布一个可以通过嵌入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脚本

你可以通过这两个资源实现你想要的功能。

撰写回答