2017-09-28 3 views
0

現在、Cythonの埋め込み機能を使用することができません。バイナリは正常にコンパイルされ、otool -L embeddedは次の結果を返します。MacにPythonを埋め込むModuleNotFoundError: 'encodings'という名前のモジュールがありません

embedded: 
     @rpath/libpython3.6m.dylib (compatibility version 3.6.0, current version 3.6.0) 
     /usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 1238.60.2) 

/System/Library/Frameworks/CoreFoundation.framework/Versions/A/CoreFoundation (compatibility version 150.0.0, current version 1349.8.0) 

これは私が実行したコマンドです。なぜこれが機能していないのかについての考えはありますか? Cythonモジュールを作成する場合、setup.pyを使用するCythonはうまく動作します。つまり、PythonでCythonモジュールをインポートできます。

$ make 

gcc -c embedded.c -I/Users/$USER/miniconda3/include/python3.6m -I/Users/$USER/miniconda3/include/python3.6m 
gcc -o embedded embedded.o -L/Users/$USER/miniconda3/lib -L/Users/$USER/miniconda3/lib/python3.6/config-3.6m-darwin -lpython3.6m -ldl -framework CoreFoundation -Wl,-stack_size,1000000 -framework CoreFoundation 

$ ./embedded 

Could not find platform independent libraries <prefix> 
Could not find platform dependent libraries <exec_prefix> 
Consider setting $PYTHONHOME to <prefix>[:<exec_prefix>] 
Fatal Python error: Py_Initialize: unable to load the file system codec 
ModuleNotFoundError: No module named 'encodings' 

Current thread 0x000000010f8113c0 (most recent call first): 
[1] 32931 abort  ./embedded 

提案ですか?

答えて

1

基本的に、PythonインタプリタなしでスタンドアロンバイナリとしてPythonネイティブコード拡張を実行しようとしています。これは決してうまくいかないでしょう。

Cython拡張コードは、Pythonインタプリタの拡張機能を提供します。

実行中のPythonインタプリタ内でのみロードできる共有モジュールです。それらはスタンドアロンバイナリとして使用することはできません。

Pythonコードのスタンドアロンバイナリを拡張子の有無にかかわらず作成して配布したい場合は、コードと共に付属する必要があります。cx_freezeを参照してください。

関連する問題