2016-01-11 23 views
48

EDITなし:How to embed Python3 with the standard library埋め込みのpython3は、標準ライブラリ

Python2のためのソリューションがここで提供されています:

Fatal Python error: Py_Initialize: unable to load the file system 
codec ImportError: No module named 'encodings' 
Is it possible to embed python without the standard library?

しかし、のpython3がでPy_Initialize();に失敗した私はここに反対質問をしてきました

py3ソースファイルはデフォルトでutf-8なのでこれは意味があります。したがって、py3ソースファイルを解析するために外部バイナリが必要なようです。

どうすればよいですか?

システムのPythonインストールでencodingsバイナリを見つけて、私のプロジェクトツリーにコピーし、環境変数PYTHONPATH(?)を設定してlibpython.dylibが見つけられるようにします。

これを回避することはできますか?もしそうでなければ、誰かが私が取る必要のあるステップを明確にすることができますか?それ以上のしゃっくりがありますか?


注:私は私のシステムのPythonのライブラリを見つけ

まず:/usr/local/Frameworks/Python.framework/Versions/3.4/Python(私の場合はそれがあった後世のために、これは私はOSX上の私のプロジェクトへのリンクlibpython.dylibスタンドアロン得た方法でありますhomebrewと一緒にインストールされます)。

は今:

  • コピーbuild settings -> linking./Libs/libpython3.4.1_OSX.dylib

  • ゴーを作成する私のプロジェクトフォルダには.dylibとは、それが表示されます。この時点で-lpython3.4.1_OSX

other linker flagsを設定しました働くしかし、新しい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ステップを追加して、libpython3.4.1_OSX.dylibFrameworksにコピーします(これは正しい場所です)。
  • build settings -> linkingに入り、最後に、私は私がまたPYTHONPATH

    を追加する必要があります。この作業を取得することを疑うedit scheme -> run -> arguments -> environment variablesに入ると値../Frameworks

    PYTHONHOMEを追加する必要が@executable_path/../Frameworks/libpython3.4.1_OSX.dylib

runpath search pathsを設定

リンク:
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/

+13

私はもっと多くの要件があることを恐れています。モジュールのインポートは、例えば、 'importlib'パッケージによって処理されます。私は、Python 3がstdlibを少なくとも削除することはできないと思っています。 –

+0

'encodings'はプログラムではありません。これはpythonパッケージ – ppperry

+1

py2appのランチャーコードのソースを読んでみてください。 OS XとPythonを起動して稼働させることについて多くのことを知っています。 –

答えて

2

私はこれを試みてきたし、それはあなたがPythonライブラリなしでのPython 3を埋め込むために過ごしたいよりも時間がかかるだろう。

ライブラリ内のモジュールの中には、Python 3を動作させるために必要なものがあり、それがなければ動作するためには多くの変更が必要です。

+0

これは良い答えではありません。あなたが言うことが何であるかについての説明はありません。また、これとpython 3.xが動作していないpython 2.xの間の不連続性の説明もありません。 – snb

+0

Python 3には現在、encodings.utf_8、encodings.latin_1、builtins、ioなどのハードコーディングされた依存関係がいくつかあります。初期化中にモジュールをインポートします。これはPython 2では当てはまりませんでした。 – Alden

関連する問題