日々精進

新しく学んだことを書き留めていきます

pythonnetでpythonモジュールを実行すると「No module named~」エラー

コマンドプロンプトから python main.py のように実行すると問題無いのにpythonnetから実行すると「No module named~」エラーになる、というケースがあった。

原因はpythonnetが.pthファイルを読んでくれないこと。以下のサイトには

.pth ファイルを読み込んで処理しているのは site モジュールです。このモジュールは通常 Python インタプリタの初期化中に読み込まれるため通常は問題になりません。しかしインタプリタが -S オプション付で呼び出された時には site パッケージの自動インポートが無効となります。結果、 .pth ファイルは読み込まれないこととなります。

と記載されている。これと同じことがpythonnetから実行した時にも起きているのかも知れないが、未検証。.pthで設定しているモジュール検索パスをPYTHONPATHに設定することで直った。

blue-red.ddo.jp

pythonnetから実行した時に結構No module namedエラーが出ることがあるので 以下のようにコマンドプロンプトから実行して問題を切り分けることが多い。

set PYTHONHOME=C:\conda_env
set PYTHONPATH=C:\app
cd C:\app
C:\conda_env\python.exe
import sys;print(sys.path)
sys.path.remove("C:\\Users\\username\\AppData\\Roaming\\Python\\Python37\\site-packages")
import win32con