我想有一个嵌入Python解释器和一个小脚本的大二进制文件 - 我对这整个静态链接,配置和放大器都是全新的。 make和GCC等。请问,有人可以向我描述构建此类可执行文件的基本步骤吗?
我在MacOS 10.6上,我下载了Python 3.3 beta。然后,我创建了“test.c”:
#include <Python.h>
int
main(int argc, char *argv[])
{
Py_Initialize();
PyRun_SimpleString("from time import time,ctime\n"
"print('Today is', ctime(time()))\n");
Py_Finalize();
return 0;
}
现在,在一个文件夹中,我有“Python-3.3.0b1”文件夹和“test.c”文件。
我打字:
gcc -I ./Python-3.3.0b1 -o test test.c
但是我收到了很多“包含”错误。
但我甚至不确定这是否是正确的方法......?我应该首先以某种方式构建Python,然后将其“链接”为“test.c”吗?
顺便说一下,如果Python发布了,他们会使用相同的“./configure”和“make”程序吗?他们是使用一些特殊选项还是我能够构建与python.org提供的非常相似(相同)的Python可执行文件?
另外,我尝试了这个“./configure”和“make”,它创建了一个名为“build / lib.macosx-10.6-x86_64-3.3”的文件夹,里面有很多* .so文件(?)但是什么都没有叫做“python”或类似的......?
答案 0 :(得分:3)
问题是gcc对Python安装知之甚少,并没有正确链接所有头文件。您需要从distutils
获取该信息,并尝试找出如何将该信息导入gcc。在Python文档的嵌入部分的Linking Requirements中可以更好地解释这一点。
但是有一种更简单的方法。有一个名为pymkfile.py
的脚本将创建一个make
文件,其中包含您需要的所有信息。参见this tutorial的第4节。
从第4节开始,非常类似于您尝试做的示例:
嵌入Python代码的最简单方法是使用 PyRun_SimpleString()函数。这个函数向它发送一行代码 翻译。因为解释器是持久的,就像在交互式Python会话中键入各行一样,这意味着您可以执行新行到 通过每行代码调用PyRun_SimpleString来解释器。例如, 下面的代码运行一个简单的Python程序来拆分和重新组合字符串:
#include <Python.h>
int main()
{
printf("String execution\n");
Py_Initialize();
PyRun_SimpleString("import string");
PyRun_SimpleString("words = string.split('rod jane freddy')");
PyRun_SimpleString("print string.join(words,', ')");
Py_Finalize();
return 0;
}
您可以看到基本结构很简单。你有初始化和最终确定 步骤和嵌入之间是对Python解释器的调用。要编译 程序,复制代码并将其保存到名为pystring.c的文件中。首先,使用脚本 构建一个合适的Makefile:
$ pymkfile.py pystring > Makefile
现在,运行
make
来实际构建代码。在最终申请创建后, 运行应用程序以查看结果:
$ ./pystring
String execution
rod, jane, freddy
您刚刚使用C包装器执行了一些简单的Python代码。你可以用 执行使用嵌入式Python的许多不同任务的相同基本技术 在一个应用程序中唯一明显的限制是,实质上是两个组成部分 是分开的。嵌入式Python解释器之间没有通信 和主机C应用程序。
所以,你给了解释器一些代码,然后执行并打印出来;请注意如何 您不必从解释器获取输出,然后打印它:解释器将信息直接发送到标准输出。
答案 1 :(得分:2)
你考虑过使用py2app吗?如果您只对发布脚本而不是编写C代码感兴趣,那么它可以更好地满足您的需求。
答案 2 :(得分:1)
另外,我尝试了这个“./configure”和“make”,它创建了一个文件夹 称为“build / lib.macosx-10.6-x86_64-3.3”,包含大量* .so文件(?) 但没有什么叫“蟒蛇”或类似的东西......?
.so
个文件是目标文件。 python可执行文件仅在您调用make install
后生成,因此有三个步骤:
./configure
make
make install
最后一步通常涉及sudo
确保您没有更换系统Python。不是一个好主意。
如果您使用的是OS X,通常的方法是与OS X Python系统框架链接。这看起来像嵌入式Python,但您链接到现有的Python系统。系统Python链接目标是libpython.dylib
/usr/lib
如果您不喜欢使用Xcode,只需使用Google的“嵌入式Python OS X”并找到一个很好的教程。
我第一次使用THIS教程时就这样做了。