python - 是否可以在没有标准库的情况下嵌入 python?

标签 python python-embedding

是否可以在没有标准库的情况下嵌入 python?

我正在使用 cmake build for python 2.7.6我已经运行了一个基本的嵌入式脚本,如下所示:

#include <stdio.h>
#include <Python.h>

int main(int argc, char *argv[]) {

  /* Setup */
  Py_SetProgramName(argv[0]);
  Py_Initialize();

  /* Run the 'main' module */
  int rtn = Py_Main(argc, _argv);
  Py_Finalize();

  return rtn;
}

..但是当我运行它时,我得到:

ImportError: No module named site

如果我设置了正确的 $PYTHONHOME,它工作正常;但这不是我想要做的。我正在尝试将 python 的副本嵌入到没有标准库的独立应用程序中。

我很欣赏它的使用,但对于这个特定的嵌入式环境,我想要更像 lua 的东西(但显然使用 python 语法),其中只有父应用程序公开的特定库可用。

这有一个额外的好处,即不关心分发(或构建)标准库及其所有交叉链接的动态库。

这可能吗?或者我是否不可避免地会偶然发现缺少语言的基本 block ,例如 sys.path、import、{}、[] 或标准库中的类似内容?

如果可能的话,你会怎么做?

最佳答案

简单的回答是可以。

int main(int argc, char *argv[]) {

  /* Setup */
  Py_NoSiteFlag = 1; // <--- This
  Py_SetProgramName(argv[0]);
  Py_Initialize();

  /* Run the 'main' module */
  int rtn = Py_Main(argc, argv);
  Py_Finalize();

  return rtn;
}

据我所知,没有任何问题,您可以继续使用一切(包括导入模块的能力~),一切都很好。如果您尝试从未捆绑的标准库中导入任何内容,您将得到:

>>> import os;
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ImportError: No module named os

我会在这里为任何感兴趣的人留下一份代码副本;

https://github.com/shadowmint/cmake-python-embed-nostdlib

关于python - 是否可以在没有标准库的情况下嵌入 python?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20951624/

相关文章:

Python 覆盖率找不到我自己的模块

python - 如何使用Python检测视频OpenCV中的对象?

python - 如何矢量化我的函数以加快数据帧上的操作?

python - 为什么 PyImport_Import 无法从当前目录加载模块?

python - 无法在 Windows : No module named '_pyrsistent_version' 上安装 jupyter

c++ - 试图将 python 嵌入到 visual studio 2010 c++ 文件中,以代码 1 退出

python - 在 C++ 中嵌入 python 的编码

python - 仅在 mask 区域计算梯度

python - 如何在找到值后立即在字符串搜索中跳到索引? Python

python - 运行 Python 3.5 解释器需要哪些标准库模块?