EDIT: Ich habe eine gegenüberliegende Frage hier gestellt: How to embed Python3 with the standard libraryEmbed Python3 ohne Standardbibliothek
Eine Lösung für Python2 finden Sie hier: Is it possible to embed python without the standard library?
schlägt jedoch fehl Python3 auf Py_Initialize();
mit:
Fatal Python error: Py_Initialize: unable to load the file system
codec ImportError: No module named 'encodings'
Dies ist sinnvoll, weil py3-Quelldateien standardmäßig utf-8 sind. Es scheint also, dass es eine externe Binärdatei benötigt, nur um py3 Quelldateien zu analysieren.
Was also zu tun?
Es sieht aus, als ob ich brauche die encodings
binär in meinem System Python-Installation, kopieren Sie diese in meinen Projektbaum zu suchen, und vielleicht einige Umgebungsvariable PYTHONPATH gesetzt (?), So dass meine libpython.dylib es finden können.
Ist es möglich, dies zu vermeiden? Und wenn nicht, kann mir jemand die Schritte erklären, die ich machen muss? Wird es noch Schluckauf geben?
HINWEIS: Für die Nachwelt ist dies, wie ich ein Stand-alone libpython.dylib Einbindung in mein Projekt auf OSX:
Zuerst habe ich mein System Python-Bibliothek finden: /usr/local/Frameworks/Python.framework/Versions/3.4/Python
(in meinem Fall war es installiert mit Homebrew).
Jetzt I:
Kopie der .dylib in meinem Projektordner
./Libs/libpython3.4.1_OSX.dylib
Go in
build settings -> linking
Erstellen und setzenother linker flags
zu-lpython3.4.1_OSX
An dieser Stelle erscheint arbeiten. Wenn Sie jedoch wissen, dass Sie versuchen, es auf einer neuen OSX-Installation zu erstellen, wird es fehlschlagen. Dies ist, weil:
$ otool -D ./libpython3.4.1_OSX.dylib
./libpython3.4.1_OSX.dylib:
/usr/local/Frameworks/Python.framework/Versions/3.4/Python
Die .dylib hält immer noch an seinem alten Speicherort. Es ist wirklich seltsam für mich, dass die .dylib eine Verknüpfung zu ihrem Ort enthält, da alles, was sie benutzt, wissen muss, wo sie ist, um sie überhaupt aufzurufen!
Wir können dies korrigieren mit:
$ install_name_tool -id @rpath/libpython3.4.1_OSX.dylib libpython3.4.1_OSX.dylib
Aber dann auch in unserem Xcode-Projekt müssen wir:
- in
build phases
gehen. Fügen Sie einencopy files
Schritt hinzu, derlibpython3.4.1_OSX.dylib
zuFrameworks
kopiert (das ist der richtige Platz, um es zu setzen). - Go in
build settings -> linking
und setzenrunpath search paths
zu@executable_path/../Frameworks/libpython3.4.1_OSX.dylib
Schließlich muss ich in edit scheme -> run -> arguments -> environment variables
gehen und fügen Sie PYTHONHOME
mit Wert ../Frameworks
Ich vermute, dass diese Arbeit bekommen werde ich auch eine PYTHONPATH
Links:
https://mikeash.com/pyblog/friday-qa-2009-11-06-linking-and-install-names.html
http://qin.laya.com/tech_coding_help/dylib_linking.html
https://github.com/conda/conda-build/issues/279#issuecomment-67241554
Can you please help me understand how Mach-O libraries work in Mac Os X?
http://nshipster.com/launch-arguments-and-environment-variables/
Ich fürchte, es gibt mehr Anforderungen; Der Import von Modulen wird zum großen Teil durch das Paket 'importlib' abgewickelt. Ich glaube nicht, dass Python 3 die stdlib nicht mehr entfernen kann, zumindest nicht ohne zumindest eine Teilmenge. –
'encodings' ist kein Programm. Es ist ein Python-Paket – ppperry
Versuchen Sie, die Quelle von Launcher-Code py2app zu lesen. Es weiß viel über OS X und Python zum Laufen bringen. –