cpp 如何嵌入 Python 解释器

2015-04-16 22:05:07 +08:00
 YUCOAT
我想在我的cpp程序里调用Python脚本函数,然后照着网上的资料,写了一个demo,运行成功了。然后我把我的demo、py的dll、py脚本,MSVCxxx之类的文件挪到另外一台没有安装Python解释器的电脑上,我的demo跑不起来了。

很显然,我的demo是通过python的dll调用了我本机的Python解释器来运行Python脚本的。现在我需要让我的cpp程序在客户的电脑上也运行Python脚本,而客户的电脑是没有安装Python解释器的,那我应该怎么做呢?

我没有找到类似的文档,谢谢大家的回答。
4180 次点击
所在节点    程序员
8 条回复
timonwong
2015-04-16 22:13:43 +08:00
先看官方文档:
https://docs.python.org/2/extending/embedding.html

一些库:
超级重量级的 boost::python

如果你已经在本机能运行了,你需要打包:
1. Python??.dll 以及依赖 (比如 msvc 运行库)
2. python stdlib, (可以打包为 zip, 比如 python27.zip, 然后加入 PYTHONPATH 环境变量)
YUCOAT
2015-04-16 22:51:19 +08:00
@timonwong

我已经尝试过了,把我机器上的Python34文件复制到没有安装的电脑上,然后把我的exe和py都放到对面机器上的Python34里,把msvc之类的必要dll页复制过去就能直接运行我的程序。可以不用设置环境变量。
timonwong
2015-04-16 23:03:07 +08:00
@YUCOAT
我的意思是这样的

- 你的程序.exe
- python34.dll
- python34.zip
- msvcrt 相关 dll

python34.zip 是 Python34\Lib 打包
Py_SetPath(L"xxx\\python34.zip");
YUCOAT
2015-04-17 00:11:20 +08:00
@timonwong 了解啦~
Septembers
2015-04-17 19:44:25 +08:00
@timonwong
/t/180051#r_1933214
在Python-2.7.3/Modules/python.c的main函数的首行加入
Py_SetPath(L"./python-stdlib.zip");
会编译失败 请问需要改写才能编译通过并运行 谢谢
timonwong
2015-04-17 20:30:22 +08:00
Septembers
2015-04-17 21:36:44 +08:00
@timonwong
➜ Python-2.7.3 ./python
[1] 19515 segmentation fault (core dumped) ./python
timonwong
2015-04-17 21:59:17 +08:00
@Septembers
1. 为什么运行 python,这里的上下文是 embedding 不是 extending...
2. PySys_SetPath 接收的是 char * 不是 wchart_t *

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/184223

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX