cythonで書いたコードをVC++でビルドする時の注意点


概要


pythonで書いた機能をwindowsデスクトップアプリに組み込みたい場合、cythonで機能を書いてVC++でdllにビルドするという方法があります。この時にハマったことを残しておきたいと思います。



内容と対応


setup.pyを実行すると"ImportError: DLL load failed"


(これはVC++じゃないですね)コマンドラインで実行したらこのエラーが出るのですが、anaconda promptでは起きませんでした。anaconda promptで実行しましょう。(たぶんパスが通ってないんだと思います)



No module named 'encodings'


python.exeのパスを環境変数に追加してください。



プリコンパイル済みヘッダーファイルを開けません


プロパティ → c/c++ → プリコンパイル済みヘッダー → プリコンパイル済みヘッダを使用しない

に変更してください。(cython関係ない?)

プリコンパイル済みヘッダはヘッダファイルのローディング効率よくするためのものなのでなくても大丈夫みたいです。



kernel32.libが見つかりません


プロパティ → VC++ディレクトリ → ライブラリディレクトリにanacondaの\Library\binを追加する際に既存のパスを消していました。それらは消さずに追加してください。(これはただの凡ミスですね、、、)



fatal error: 'numpy/arrayobject.h' file not found


cimport numpyをしている場合はasを使って名前を変えてimportしてください。setup.pyでinclude_dirsにnp.get_includeを加えろという記事が多くありますが、import とcimportを同じ名前でしている場合はこれは通用しないみたいです。



python37_d.dllが存在しません


debugビルドではなくrerleaseビルドにしてください。



最後に


自分がvc++に関してはほぼ素人なので暫定対策しか分かりませんが一応エラーは取ることができました、、、

そもそもcythonをc++に組み込むということ自体が稀なのであまり情報もなく大変でした。

最新記事

すべて表示

概要 フィッティングを行いたい場合、pythonならばscipy.optimize.leastsqなどでできます。 しかし、フィッティングを行う場合、フィッティングパラメータに条件を付けたい場合も多々あります。 例えば、下記のようにパラメータa、bは共に正の範囲で最適な値を求める、という感じです。 f(x, a, b)=a*x^2+b (a>0 and b>0) 今回はそんな手法についてご紹介しま

靴を大切にしよう!靴管理アプリ SHOES_KEEP

納品:iPhone6.5①.png

靴の履いた回数、お手入れ回数を管理するアプリです。

google-play-badge.png
Download_on_the_App_Store_Badge_JP_RGB_blk_100317.png

テーマ日記:テーマを決めてジャンルごとに記録

訂正①2040×1152.jpg

ジャンルごとにテーマ、サブテーマをつけて投稿、記録できる日記アプリです。

google-play-badge.png