PyCharm でユニットテストを実行しようとすると ImportError が出てしまう場合、原因はシンボリックリンクの可能性あり
@PyCharm 2018.1.4 (Community Edition) on Ubuntu 16.04 64bit
PyCharm はユニットテストファイルを自動的に認識してコンテキストメニューを変化させてくれます。
例えば以下のように main_test.py
を作成したとして1、
右クリック → Run 'Unittests in main_te...'
とすると、ユニットテスト用の Configuration が作成され、テストが実行されます。
実行結果はこんな感じ。
パスにシンボリックリンクを含んでいると失敗する
ところが、このユニットテスト、プロジェクトパスにシンボリックリンクが含まれていると失敗してしまいます。
例えば、以下のようにシンボリックリンクでプロジェクトが指定されているとします。
$ ln -s untitled Project/untitled |
Project/untitled
プロジェクトを PyCharm で開いて、先ほどと同じように実行すると、
以下のように ImportError が発生してしまうのです。
Ran 1 test in 0.001s FAILED (errors=1) Launching unittests with arguments python -m unittest /home/yusuke/Projects/untitled/tests/main_test.py in /home/yusuke/untitled/tests Error Traceback (most recent call last): File "/usr/lib/python3.5/unittest/case.py", line 58, in testPartExecutor yield File "/usr/lib/python3.5/unittest/case.py", line 600, in run testMethod() File "/usr/lib/python3.5/unittest/loader.py", line 34, in testFailure raise self._exception ImportError: Failed to import test module: /home/yusuke/Projects/untitled/tests/main_test Traceback (most recent call last): File "/usr/lib/python3.5/unittest/loader.py", line 153, in loadTestsFromName module = __import__(module_name) ImportError: No module named '/home/yusuke/Projects/untitled/tests/main_test'
今回はプロジェクトのルートディレクトリをシンボリックリンクにしましたが、パスにシンボリックリンクを含んでいる場合は全て失敗するようです。
回避策1
プロジェクトパスにシンボリックリンクを含めないのが一番ですが、それが出来ない場合2は Run/Debug Configurations を編集することで対処可能です。
Edit Configurations...
Target を Module name
に変更し、main_test
のように指定します。
なお、ディクトリ構造の場合は tests.main_test
の用にピリオドでモジュール指定します。
回避策2
Target を実ファイルの存在するパスに書き換えても大丈夫です。
これが出来るなら最初からシンボリックリンクを含まないパスでプロジェクトを開いておけって話ですけど。
0 件のコメント:
コメントを投稿