如何创建一个在没有本地Python安装的情况下嵌入并运行Python代码的应用程序?
各位软件开发人员好 我想发布一个C程序,它可以通过嵌入Python解释器编写脚本。如何创建一个在没有本地Python安装的情况下嵌入并运行Python代码的应用程序?,python,c,dll,distribution,Python,C,Dll,Distribution,各位软件开发人员好 我想发布一个C程序,它可以通过嵌入Python解释器编写脚本。 C程序使用Py_Initialize、PyImport_Import等实现Python嵌入 我正在寻找一种只分发以下组件的解决方案: 我的程序可执行文件及其库 Python库(dll/so) 包含所有必要Python模块和库的ZIP文件 我怎样才能做到这一点?有没有一个循序渐进的方法 该解决方案应适用于Windows和Linux 提前谢谢。你看了吗?不需要安装任何东西。只需复制包含的文件即可使用解释器 编辑:
C程序使用Py_Initialize、PyImport_Import等实现Python嵌入 我正在寻找一种只分发以下组件的解决方案:
- 我的程序可执行文件及其库
- Python库(dll/so)
- 包含所有必要Python模块和库的ZIP文件
一旦有了它,您就可以使用导入钩子(请参阅)让嵌入式Python代码从您选择的任何地方加载模块。但是,如果您将所有内容都放在一个zipfile中,那么您可能只需要将其作为
sys.path
上的唯一条目。您看过Python的官方文档了吗:
还有一个IBM提供的非常好的PDF:
使用这两种资源,您应该能够做您想做的事情。我只是在一台没有安装Python的计算机上测试了我的可执行文件,并且它工作正常 当您将Python链接到可执行文件(无论是动态的还是静态的)时,您的可执行文件已经获得了基本的Python语言功能(操作符、方法、基本结构,如字符串、列表、元组、dict等),而没有任何其他依赖性 然后我让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
...
有一个程序叫py2exe。我不知道它是否只适用于Windows。此外,我使用的最新版本并没有将所有内容打包到一个.exe文件中。它创建了一堆必须分发的东西——一个zip文件等等。我想这就是你想要的答案 基本上,您需要:
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
变量所述
希望这有帮助。我删除了我的答案,因为它不适用。您可能想编辑这个问题,这样就可以清楚地看到您正在将Python嵌入C应用程序中。但这不是我要找的。不应该有任何其他依赖性。啊,我应该在发布之前刷新评论。。。!我是按照嵌入指南做的,效果不错。标题似乎有误导性——Python是嵌入的。我不想将Python代码嵌入到可执行文件中——通过链接到Python,可执行文件将变得可编写脚本。因此,py2exe不是解决方案。