Ist es möglich, Python ohne die Standardbibliothek einzubetten?Ist es möglich, Python ohne die Standardbibliothek einzubetten?
Ich arbeite mit einem cmake build for python 2.7.6 und ich habe eine grundlegende eingebettete Script ausgeführt wird, bekam etwa so:
#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;
}
..aber wenn ich es benutze, erhalte ich:
ImportError: No module named site
Wenn ich ein korrektes $ PYTHONHOME einstelle, funktioniert es gut; aber das versuche ich nicht. Ich versuche, eine Kopie von Python in eine eigenständige Anwendung ohne die Standardbibliothek einzubetten.
Ich schätze die Verwendung von es, aber für diese spezifische eingebettete Umgebung möchte ich etwas mehr wie lua, (aber mit Python-Syntax offensichtlich), wo nur die spezifischen Bibliotheken zur Verfügung gestellt von der übergeordneten Anwendung verfügbar sind.
Dies hat den zusätzlichen Vorteil, dass es nicht darum geht, die Standardbibliothek mit all ihren vernetzten dynamischen Bibliotheken zu verteilen (oder zu bauen).
Ist das alles möglich? Oder stolpere ich unweigerlich in fehlende Grundblöcke der Sprache wie sys.path, import, {}, [] o.ä., die Teil der Standardbibliothek sind?
Wenn es möglich ist, wie würdest du es tun?
Warum stellen Sie nicht Ihre eigene minimale "Standardbibliothek" zur Verfügung? Schließen Sie nur 'site.py' ein, alles, was' site.py' benötigt, und alles, was Ihre Anwendung benötigt? –
Aber, ja, die CPython-Implementierung erfordert, dass bestimmte Module vorhanden und importierbar sind. In Python 3 beinhaltet das die Import-Maschinerie. 'sys' ist ein eingebautes Modul, Syntax wird nie importiert, aber ein Teil der Sprache, so dass' {} 'und' [] 'nicht zerbrechen. –
Ich habe darüber nachgedacht, aber es ist ein wenig nervig, eine Binärdatei mit einer zu versenden.PY-Datei; Ich dachte vielleicht daran, den Importmechanismus zu hacken, wie es kivy für sein kivy-ios-Projekt tut, und die minimal erforderlichen Module einzubauen sind rohe Textblobs, aber ich bin mir nicht sicher, wie ich diesen Pfad weitermachen soll. – Doug