由于这并没有真正的答案,我将把它提供给后代。我也无法使用 Mac,所以它对你来说可能与在 Linux 上有所不同。此外,必须安装所需的依赖项才能使其正常工作,但这通常很容易弄清楚。
创建工作目录
mkdir ~/embeddedpython
cd ~/embeddedpython
下载 Python 源代码
wget https://www.python.org/ftp/python/3.6.1/Python-3.6.1.tgz
为 Python 创建安装目录
mkdir ./installation
解压下载的源文件
tar xvf Python-3.6.1.tgz
进入新建的源码目录
cd Python-3.6.1
配置Python安装到我们的安装目录
./configure --prefix="/home/<username>/embeddedpython/installation"
制作和安装 Python
make && make install
回到你的工作目录
cd ..
创建一个新的PYTHONHOME 库所在的目录
mkdir home && mkdir home/lib
将 Python 库复制到我们的新主目录
cp -r ./installation/lib/python3.6 ./home/lib/
使用取自 python documentation 的以下代码创建一个新的 c++ 源文件 (embeddedpython.cpp),setenv 函数调用除外。
#include <Python.h>
#include <cstdlib>
int main(int argc, char *argv[])
{
setenv("PYTHONHOME", "./home", 1);
wchar_t *program = Py_DecodeLocale(argv[0], NULL);
if (program == NULL) {
fprintf(stderr, "Fatal error: cannot decode argv[0]\n");
exit(1);
}
Py_SetProgramName(program); /* optional but recommended */
Py_Initialize();
PyRun_SimpleString("from time import time,ctime\n"
"print('Today is', ctime(time()))\n");
if (Py_FinalizeEx() < 0) {
exit(120);
}
PyMem_RawFree(program);
return 0;
}
编译运行
g++ embeddedpython.cpp -I ./installation/include/python3.6m/ ./installation/lib/libpython3.6m.a -lpthread -ldl -lutil
./a.out
> Today is Fri Apr 14 16:06:54 2017
从这里开始,它像往常一样是标准的嵌入式 python。使用这种方法,必须将“home”目录包含在您的部署中,并且必须将环境变量PYTHONHOME 设置为指向它,然后才能执行任何与python 相关的代码。