1. ホーム
  2. python

[解決済み] python はモジュールをインポートできるのに pytest はできない

2022-01-29 06:47:26

質問

私はPythonでパッケージを作成しています。私はvirtualenvを使用しています。私はコードを開発しながらパッケージのモジュールをインポートしてテストを行うことができるように、私のvirtualenvの.pthパスにモジュールのルートへのパスを設定します(質問1:それは良い方法でしょうか)。これは問題なく動作します(以下は例で、これは私が望む動作です)。

(VEnvTestRc) zz@zz:~/Desktop/GitFolders/rc$ python
Python 2.7.12 (default, Jul  1 2016, 15:12:24) 
[GCC 5.4.0 20160609] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> from rc import ns
>>> exit()
(VEnvTestRc) zz@zz:~/Desktop/GitFolders/rc$ python tests/test_ns.py 
issued command: echo hello
command output: hello

しかし、PyTestを使おうとすると、いくつかのインポートエラーメッセージが表示されます。

(VEnvTestRc) zz@zz:~/Desktop/GitFolders/rc$ pytest
=========================================== test session starts ============================================
platform linux2 -- Python 2.7.12, pytest-3.0.5, py-1.4.31, pluggy-0.4.0
rootdir: /home/zz/Desktop/GitFolders/rc, inifile: 
collected 0 items / 1 errors 

================================================== ERRORS ==================================================
________________________________ ERROR collecting tests/test_ns.py ________________________________
ImportError while importing test module '/home/zz/Desktop/GitFolders/rc/tests/test_ns.py'.
Hint: make sure your test modules/packages have valid Python names.
Traceback:
tests/test_ns.py:2: in <module>
    from rc import ns
E   ImportError: cannot import name ns
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! Interrupted: 1 errors during collection !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
========================================= 1 error in 0.09 seconds ==========================================
(VEnvTestRc) zz@zz:~/Desktop/GitFolders/rc$ which pytest
/home/zz/Desktop/VirtualEnvs/VEnvTestRc/bin/pytest

これはインポートエラーを表しているように見えますが、Pythonでは問題なく実行できるのに、なぜPyTestにだけ問題があるのでしょうか?理由/改善策(質問2)について、何か提案があれば教えてください。PyTest の 'ImportError: cannot import' エラーをググってスタックオーバーフローしてみましたが、ヒットしたのは Python のパス抜けやそれに対する対処法に関するもので、今回の問題とは違うような気がしています。何か提案はありますか?

解決方法は?

答えが見つかりました。

を付けないでください。 __init__.py ファイルを TESTS フォルダにコピーしてください。私はそのようなファイルを1つ持っていましたが、それを削除することで問題が解決しました。

の2つ目の回答に対するコメントに埋もれていたのですが、実はこれ pytestのPATH問題 'ImportError: YadaYadaYadaという名前のモジュールがありません' というわけで、私は見ませんでしたが、ここでもっと注目されることを期待しています。