是否可以在沒有標準庫的情況下嵌入python?是否可以在沒有標準庫的情況下嵌入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語法),其中只有父應用程序公開的特定庫可用。
這還有一個額外的好處,就是不用關心分佈(或構建)標準庫及其所有交叉鏈接的動態庫。
這是可能的嗎?或者我不可避免地會陷入像sys.path,import,{},[]或其他類似語言的缺失基本塊,這些是標準庫的一部分?
如果可能的話,你會怎麼做呢?
爲什麼不提供自己最小的'標準庫'?只包括'site.py',任何'site.py'都需要運行,以及你的應用程序需要什麼? –
但是,是的,CPython實現確實需要某些模塊存在且可導入。在Python 3中,包括導入機器。 'sys'是一個內置模塊,語法永遠不會被導入,而是語言的一部分,所以'{}'和'[]'不會中斷。 –
我正在考慮這個問題,但是發佈一個二進制文件有點煩人。py文件;我在想也許是像kivy那樣爲它的kivy-ios項目盜用了導入機制,並且嵌入最小的必需模塊是原始文本blob,但我並不確定如何繼續沿着該路徑前進〜 – Doug