私の場合、py.test
コマンドは失敗しますが、pytest
は完全に正常に実行されます。
私はpytest-flaskプラグインを使用します:
platform linux -- Python 3.5.2, pytest-3.0.2, py-1.4.31, pluggy-0.3.1
rootdir: /home/sebastian/develop/py/flask-rest-template, inifile:
plugins: flask-0.10.0
$ py.test
を呼び出すと、次のエラーが表示されます。
Traceback (most recent call last):
File "/usr/local/lib/python3.5/dist-packages/_pytest/config.py", line 301, in _getconftestmodules
return self._path2confmods[path]
KeyError: local('/home/sebastian/develop/py/flask-rest-template')
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "/usr/local/lib/python3.5/dist-packages/_pytest/config.py", line 332, in _importconftest
return self._conftestpath2mod[conftestpath]
KeyError: local('/home/sebastian/develop/py/flask-rest-template/conftest.py')
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "/usr/local/lib/python3.5/dist-packages/_pytest/config.py", line 338, in _importconftest
mod = conftestpath.pyimport()
File "/usr/local/lib/python3.5/dist-packages/py/_path/local.py", line 650, in pyimport
__import__(modname)
File "/usr/local/lib/python3.5/dist-packages/_pytest/assertion/rewrite.py", line 207, in load_module
py.builtin.exec_(co, mod.__dict__)
File "/home/sebastian/develop/py/flask-rest-template/conftest.py", line 2, in <module>
from app.app import create_app
File "/home/sebastian/develop/py/flask-rest-template/app/app.py", line 1, in <module>
from flask import Flask
ImportError: No module named 'flask'
ERROR: could not load /home/sebastian/develop/py/flask-rest-template/conftest.py
これは私の実際のconftest.py
ファイルです:
import pytest
from app.app import create_app
@pytest.fixture
def app():
app = create_app()
return app
私のプロジェクトの構造は次のとおりです。
.
├── app
│ ├── __init__.py
│ ├── app.py
│ └── config.py # flask configuration objects
├── conftest.py # pytest configruation
├── requirements.txt
├── ...
└── tests
└── ...
では、2つのコマンドの違いは何ですか?そして、なぜ一方が失敗し、もう一方が失敗しないのですか?
アップデート1
1)相対インポートfrom .config import Config
またはfrom config import Config
をfrom app.config import Config
などの絶対インポートに変更する必要がありました
2)python3 -m app.app
でflaskを実行
3)pytest
およびpy.test
は正常に動作するようになりました
皆さん、どうもありがとうございました!
アップデート2
これは奇妙になります...絶対インポートを使用し、pythonを-m
オプションで実行し、flaskをdebug=True
で実行すると、werkzeug
ライブラリが再ロードされません予想通りのソース:
http://chase-seibert.github.io/blog/2015/06/12/flask-werkzeug-reloader-python-dash-m.html
https://github.com/pallets/werkzeug/issues/461
https://github.com/pallets/flask/issues/1246
これは私のapp/app.py
に役立ちました:
if __== '__main__':
app.run(debug=True, use_reloader=False)
その後、python -m app.app
は正常に動作します。
実際のコマンド(コマンドラインでのツールの呼び出しを意味する)に関する質問にもう少し詳しく答えるには:
py.test
呼び出しは、古くて破壊されたジョイントです。 pytest
は新しいホットネスです(3.0以降)。 py.test
とpytest
の呼び出しは長い間共存するでしょうが、ある時点でpy.test
は廃止される可能性があります。 #dropthedot をお勧めします。
[...]したがって、pytest 3.0以降では、py.testの代わりにpytestをメインコマンドとして使用することをサポートおよび推奨します。将来的にはpy.testを廃止し、場合によっては削除する可能性もあります。
- デイブハント
後方互換性はpytestコミュニティにとって非常に重要な関心事であるため、古い方法は決してなくなることはなく、それを維持することはメンテナンスの負担にはなりません( setup.pyの別のエントリポイントとして定義されているだけです) )。
つかいます pytest ...
またはさらに良いpython -m pytest ...
。
古い名前は忘れることができますが、まだどこかで見つけた場合は明らかにバグです。