Py_Initialize schlägt fehl – ​​der Dateisystem-Codec kann nicht geladen werden

 C Programming >> C-Programmierung >  >> Tags >> File
Py_Initialize schlägt fehl – ​​der Dateisystem-Codec kann nicht geladen werden

Prüfen Sie PYTHONPATH und PYTHONHOME Umgebungsvariablen und stellen Sie sicher, dass sie nicht auf Python 2.x zeigen.

http://bugs.python.org/issue11288


Teile davon wurden bereits erwähnt, aber kurz gesagt hat dies in meiner Umgebung funktioniert, in der ich mehrere Python-Installationen habe und meine globale Betriebssystemumgebung so eingerichtet ist, dass sie auf eine andere verweist installieren als die, mit der ich zu arbeiten versuche, wenn das Problem auftritt.

Stellen Sie sicher, dass Ihre (lokale oder globale) Umgebung vollständig ist Setup, um auf die Installation zu verweisen, mit der Sie arbeiten möchten, z. Sie haben zwei (oder mehr) Installationen von, sagen wir, python27 und python33 (sorry, das sind Windows-Pfade, aber das Folgende sollte genauso gut für äquivalente UNIX-Pfade gelten, bitte lassen Sie mich wissen, was mir hier fehlt ( wahrscheinlich kann der Pfad der DLLs abweichen)):

C:\python27_x86

C:\python33_x64

Wenn Sie nun beabsichtigen, mit Ihrer python33-Installation zu arbeiten, aber Ihre globale Umgebung auf python27 verweist, stellen Sie sicher, dass Sie Ihre Umgebung als solche aktualisieren (während PATH und PYTHONHOME kann optional sein (z. B. wenn Sie vorübergehend in einer lokalen Shell arbeiten)):

PATH="C:\python33_x64;%PATH%"

PYTHONPATH="C:\python33_x64\DLLs;C:\python33_x64\Lib;C:\python33_x64\Lib\site-packages"

PYTHONHOME=C:\python33_x64

Beachten Sie, dass Sie möglicherweise andere Bibliothekspfade an Ihren PYTHONPATH anhängen müssen/möchten falls von Ihrer Entwicklungsumgebung gefordert, aber mit Ihrem DLLs , Lib und site-packages Die richtige Einrichtung ist von größter Bedeutung.

Hoffe das hilft.


Der Kerngrund ist ganz einfach:Python findet sein Modulverzeichnis nicht, also kann es natürlich encodings nicht laden , auch

Das Python-Dokument zum Einbetten sagt "Py_Initialize() berechnet den Modul-Suchpfad basierend auf seiner besten Schätzung" ... "Insbesondere sucht es nach einem Verzeichnis namens lib/pythonX.Y "

Wenn die Module jedoch (nur) in lib installiert sind - relativ zur Python-Binärdatei - obige Vermutung ist falsch.

Obwohl Dokumente sagen, dass PYTHONHOME und PYTHONPATH betrachtet werden, haben wir festgestellt, dass dies nicht der Fall war; ihr tatsächliches Vorhandensein oder ihr Inhalt war völlig irrelevant.

Das einzige, was einen Effekt hatte, war ein Aufruf von Py_SetPath() mit z.B. [path-to]\lib als Argument vor Py_Initialize() .

Sicherlich ist dies nur eine Option für ein Einbettungsszenario, in dem man direkten Zugriff und Kontrolle über den Code hat; Bei einer vorgefertigten Lösung sind möglicherweise spezielle Schritte erforderlich, um das Problem zu lösen.