Hier ist ein CPython-Programm, das versucht, den Interpreter mit einem leeren sys.path
:
Beim Ausführen des obigen Programms tritt der folgende Fehler auf:
%Vor% Also, welche der Pakete und Module in der Python 3.5 Standardbibliothek, außer dem encodings
-Paket, sind absolut notwendig, um den Python 3.5
Interpreter auszuführen? Diese Information scheint mir in der Dokumentation nicht enthalten.
Dies sind Pakete / Module, die während des Startvorgangs des Interpreters verwendet werden (z. B. @Charles Duffy in einem Kommentar, indem in sys.modules
gesucht wird).
Das Ergebnis hängt davon ab, ob Sie site
aktiviert haben oder nicht (Ihr Py_NoSiteFlag = 1;
deutet an, dass dies nicht der Fall ist, aber trotzdem gebe ich beide Optionen: -)).
site
zieht ein paar zusätzliche Module mit sich, wenn Sie es wie _sitebuiltins
und stat
verwenden, insgesamt könnten Sie Python nur mit folgendem ausführen:
Wenn site
deaktiviert ist, werden Sie auf die folgende 6
reduziert:
Wenn% C
mit Py_Initialize()
aufgerufen wird (oder Windows basierend auf Ihrem Kommentar) Ich schätze, os.py
wird möglicherweise nicht benötigt.
Wenn Sie den Interpreter wie Charles Duffy in seinem Kommentar vorschlagen, laden Sie Pakete wie readline
. Es ist ein Jahrzehnt her, seit ich das gemacht habe, aber IIRC Sie brauchen dieses Modul nicht, wenn Sie Python als Erweiterung für Ihr C-Programm verwenden, da es keine Befehlszeileninteraktion gibt. Das Gleiche gilt für andere Module.
Der schnellste Weg, um zu bestimmen, was wirklich benötigt wird, mit nur einer geringen Chance, zu viel einzusteigen, besteht darin, alles von lib / python3.5 dort zu platzieren, wo Ihr Programm es finden kann, und im Programm sys.modules
auszudrucken gibt Ihnen eine Liste dessen, was Ihr Programm tatsächlich geladen hat, nicht was der Interpreter zum Starten benötigt. Danach entfernen Sie alles, was nicht auf dieser Liste steht.
Hier ist ein anderer Ansatz - Fragen Sie den Python-Interpreter, welche Module geladen werden:
%Vor% _bootlocale
ist nicht erforderlich, wird jedoch empfohlen. Es wird verwendet, um die beste Kodierung für sys.stdin / sys.stdout / sys.stderr zu initialisieren. Siehe Ссылка
sys.modules
kann liegen, wie es veränderbar ist.
Tags und Links python python-3.x python-3.5 python-internals python-embedding