C语言 如何创建一个嵌入并运行Python代码的应用程序,而无需本地安装Python?

zbwhf8kr  于 2022-12-03  发布在  Python
关注(0)|答案(7)|浏览(146)

各位软件开发人员好。
我想发布一个C程序,它通过嵌入Python解释器来编写脚本。
C程序使用Py_Initialize、PyImport_Import等实现Python的嵌入。
我正在寻找一种解决方案,其中我只分发以下组件:

  • 我的程序可执行文件及其库
  • Python库(dll/so)
  • 包含所有必要Python模块和库的ZIP文件。

我如何才能做到这一点?有没有一个循序渐进的食谱?
该解决方案应同时适用于Windows和Linux。
先谢谢你。

hgb9j2n6

hgb9j2n61#

你看过Python的官方文档吗:是吗?
IBM也提供了一个非常好的PDF文件:是的。
您应该能够使用这两种资源做您想做的事情。

des4xlb0

des4xlb02#

我只是在一台没有安装Python的计算机上测试了我的可执行文件,它工作正常。
当你将Python链接到你的可执行文件时(无论是动态的还是静态的),你的可执行文件已经获得了基本的Python语言功能(运算符、方法、基本结构,如字符串、列表、元组、字典等),而没有任何其他依赖性。
然后我让Python的setup.py通过python setup.py sdist --format=zip编译一个Python源代码发行版,它给了我一个ZIP文件,我命名为pylib-2.6.4.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

...
llycmphe

llycmphe3#

你看过Portable Python了吗?不需要安装任何东西。只要复制包含的文件就可以使用解释器。
编辑:这是仅限Windows的解决方案。

7xllpg7q

7xllpg7q4#

你看过Python文档中的Embedding Python in Another Application吗?
一旦你有了这个,你就可以使用import钩子(参见PEP 302)让你的嵌入式Python代码从你选择的任何地方加载模块。

sdnqo3pr

sdnqo3pr5#

我想这就是你想要的答案Unable to get python embedded to work with zip'd library
基本上,您需要:

Py_NoSiteFlag=1;
Py_SetProgramName(argv[0]);
Py_SetPythonHome(".");
Py_InitializeEx(0);
PyRun_SimpleString("import sys");
PyRun_SimpleString("sys.path = ['.','python27.zip','python27.zip/DLLs','python27.zip/Lib','python27.zip/site-packages']");

在您的c/c++代码中加载python标准库。
python27.zip中,所有.py源代码都位于python27.zip/Lib,如sys.path变量所述。
希望这对你有帮助。

o8x7eapl

o8x7eapl6#

有一个叫py 2 exe的程序。我不知道它是否只在Windows上可用。而且,我使用的最新版本没有把所有东西都打包到一个.exe文件中。它会创建一堆必须分发的东西--一个zip文件等等。

cbwuti44

cbwuti447#

您可以使用pyinstaller编译为一个.exe文件

pip install pyinstaller

pyinstaller --onefile urPythonScriptName.py

相关问题