編集:私はここで反対の質問をしました: Python3を標準ライブラリに埋め込む方法
Python2のソリューションは次のとおりです。 標準ライブラリなしでpythonを埋め込むことは可能ですか?
ただし、Python3はPy_Initialize();
で次のように失敗します。
Fatal Python error: Py_Initialize: unable to load the file system
codec ImportError: No module named 'encodings'
Py3ソースファイルはデフォルトでutf-8であるため、これは理にかなっています。したがって、py3ソースファイルを解析するためだけに外部バイナリが必要なようです。
じゃあ何をすればいいの?
システムPythonインストールで、encodings
バイナリを見つけ、これをプロジェクトツリーにコピーし、環境変数PYTHONPATH(?)を設定する必要があるようです。私のlibpython.dylibはそれを見つけることができます。
これを回避することは可能ですか?そうでない場合、誰かが私が取る必要のある手順を明確にすることができますか?これ以上の問題はありますか?
注:後世のために、これは私がOSX上の私のプロジェクトにリンクするスタンドアロンのlibpython.dylibを取得した方法です:
まず、システムのPythonライブラリを見つけます:/usr/local/Frameworks/Python.framework/Versions/3.4/Python
(私の場合はhomebrewでインストールされました)。
今私は:
.dylibをプロジェクトフォルダにコピーして./Libs/libpython3.4.1_OSX.dylib
を作成します
build settings -> linking
に移動し、other linker flags
を-lpython3.4.1_OSX
に設定します
この時点で、機能しているように見えます。ただし、新しいOSXインストールでビルドしようとすると、失敗します。それの訳は:
$ otool -D ./libpython3.4.1_OSX.dylib
./libpython3.4.1_OSX.dylib:
/usr/local/Frameworks/Python.framework/Versions/3.4/Python
.dylibはまだ古い場所を保持しています。 .dylibにその場所へのリンクが含まれているのは私には本当に奇妙です。それを使用するものはすべて、最初にそれを呼び出すためにそれがどこにあるかを知っている必要があるからです。
これは次の方法で修正できます。
$ install_name_tool -id @rpath/libpython3.4.1_OSX.dylib libpython3.4.1_OSX.dylib
しかし、Xcodeプロジェクトでも、次のことを行う必要があります。
build phases
に移動します。 copy files
をFrameworks
にコピーするlibpython3.4.1_OSX.dylib
ステップを追加します(これは適切な場所です)。build settings -> linking
に移動し、runpath search paths
を@executable_path/../Frameworks/libpython3.4.1_OSX.dylib
に設定します最後に、edit scheme -> run -> arguments -> environment variables
に移動し、PYTHONHOME
に値../Frameworks
を追加する必要があります。
これを機能させるには、PYTHONPATH
も追加する必要があると思います。
リンク:
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
Mac OsXでMach-Oライブラリがどのように機能するかを理解するのを手伝ってくれませんか?
http://nshipster.com/launch-arguments-and-environment-variables/
私はこれを試みましたが、PythonライブラリなしでPython 3を埋め込むのに費やすよりも時間がかかります。
ライブラリ内のいくつかのモジュールは、Python 3を実行するために必要であり、それらがなくても動作するには多くの変更が必要になります。