Pytest-django: Windows:OSError:pathlibの変更による[WinError123]

作成日 2018年08月29日  ·  12コメント  ·  ソース: pytest-dev/pytest-django

私のpytest.iniには次の内容が含まれています。

[pytest]
DJANGO_SETTINGS_MODULE = project.settings_pytest
addopts = --doctest-modules --cov=. --cov-report html:./coverage/python/html
norecursedirs = .git .venv .vscode node_modules

--cov-report渡されたUnixライクなパスが原因で、最新バージョンのpytest-djangoがWindowsでクラッシュしていると思います。 ( .iniファイルにあるため、プラットフォームに依存しない方法で指定することはできません)。

pytest実行したときに表示されるトレースバック

Traceback (most recent call last):
  File "C:\Program Files\Python37\Lib\runpy.py", line 193, in _run_module_as_main
    "__main__", mod_spec)
  File "C:\Program Files\Python37\Lib\runpy.py", line 85, in _run_code
    exec(code, run_globals)
  File "C:\Users\Atul\.virtualenvs\tenants2-Gxdtcl1v\Scripts\pytest.exe\__main__.py", line 9, in <module>
  File "c:\users\atul\.virtualenvs\tenants2-gxdtcl1v\lib\site-packages\_pytest\config\__init__.py", line 55, in main
    config = _prepareconfig(args, plugins)
  File "c:\users\atul\.virtualenvs\tenants2-gxdtcl1v\lib\site-packages\_pytest\config\__init__.py", line 180, in _prepareconfig
    pluginmanager=pluginmanager, args=args
  File "c:\users\atul\.virtualenvs\tenants2-gxdtcl1v\lib\site-packages\pluggy\hooks.py", line 258, in __call__
    return self._hookexec(self, self._nonwrappers + self._wrappers, kwargs)
  File "c:\users\atul\.virtualenvs\tenants2-gxdtcl1v\lib\site-packages\pluggy\manager.py", line 67, in _hookexec
    return self._inner_hookexec(hook, methods, kwargs)
  File "c:\users\atul\.virtualenvs\tenants2-gxdtcl1v\lib\site-packages\pluggy\manager.py", line 61, in <lambda>
    firstresult=hook.spec_opts.get('firstresult'),
  File "c:\users\atul\.virtualenvs\tenants2-gxdtcl1v\lib\site-packages\pluggy\callers.py", line 196, in _multicall
    gen.send(outcome)
  File "c:\users\atul\.virtualenvs\tenants2-gxdtcl1v\lib\site-packages\_pytest\helpconfig.py", line 89, in pytest_cmdline_parse
    config = outcome.get_result()
  File "c:\users\atul\.virtualenvs\tenants2-gxdtcl1v\lib\site-packages\pluggy\callers.py", line 76, in get_result
    raise ex[1].with_traceback(ex[2])
  File "c:\users\atul\.virtualenvs\tenants2-gxdtcl1v\lib\site-packages\pluggy\callers.py", line 180, in _multicall
    res = hook_impl.function(*args)
  File "c:\users\atul\.virtualenvs\tenants2-gxdtcl1v\lib\site-packages\_pytest\config\__init__.py", line 612, in pytest_cmdline_parse
    self.parse(args)
  File "c:\users\atul\.virtualenvs\tenants2-gxdtcl1v\lib\site-packages\_pytest\config\__init__.py", line 777, in parse
    self._preparse(args, addopts=addopts)
  File "c:\users\atul\.virtualenvs\tenants2-gxdtcl1v\lib\site-packages\_pytest\config\__init__.py", line 739, in _preparse
    early_config=self, args=args, parser=self._parser
  File "c:\users\atul\.virtualenvs\tenants2-gxdtcl1v\lib\site-packages\pluggy\hooks.py", line 258, in __call__
    return self._hookexec(self, self._nonwrappers + self._wrappers, kwargs)
  File "c:\users\atul\.virtualenvs\tenants2-gxdtcl1v\lib\site-packages\pluggy\manager.py", line 67, in _hookexec
    return self._inner_hookexec(hook, methods, kwargs)
  File "c:\users\atul\.virtualenvs\tenants2-gxdtcl1v\lib\site-packages\pluggy\manager.py", line 61, in <lambda>
    firstresult=hook.spec_opts.get('firstresult'),
  File "c:\users\atul\.virtualenvs\tenants2-gxdtcl1v\lib\site-packages\pluggy\callers.py", line 201, in _multicall
    return outcome.get_result()
  File "c:\users\atul\.virtualenvs\tenants2-gxdtcl1v\lib\site-packages\pluggy\callers.py", line 76, in get_result
    raise ex[1].with_traceback(ex[2])
  File "c:\users\atul\.virtualenvs\tenants2-gxdtcl1v\lib\site-packages\pluggy\callers.py", line 180, in _multicall
    res = hook_impl.function(*args)
  File "c:\users\atul\.virtualenvs\tenants2-gxdtcl1v\lib\site-packages\pytest_django\plugin.py", line 209, in pytest_load_initial_conftests
    _django_project_scan_outcome = _add_django_project_to_path(args)
  File "c:\users\atul\.virtualenvs\tenants2-gxdtcl1v\lib\site-packages\pytest_django\plugin.py", line 140, in _add_django_project_to_path
    project_dir = find_django_path(args)
  File "c:\users\atul\.virtualenvs\tenants2-gxdtcl1v\lib\site-packages\pytest_django\plugin.py", line 127, in find_django_path
    args = [p for p in args if p.is_dir()]
  File "c:\users\atul\.virtualenvs\tenants2-gxdtcl1v\lib\site-packages\pytest_django\plugin.py", line 127, in <listcomp>
    args = [p for p in args if p.is_dir()]
  File "C:\Program Files\Python37\Lib\pathlib.py", line 1330, in is_dir
    return S_ISDIR(self.stat().st_mode)
  File "C:\Program Files\Python37\Lib\pathlib.py", line 1140, in stat
    return self._accessor.stat(self)
OSError: [WinError 123] The filename, directory name, or volume label syntax is incorrect: 'html:.\\coverage\\python\\html'
bug

全てのコメント12件

pathlibへの切り替えが原因のようです。

/ cc @voidus

回避策として--cov-report=html:./coverage/python/htmlを試してください。

こんにちは私はpytest。\ app \ tests.py :: WebServiceTestにも問題があります

回避策は機能しますか?

こんにちは
OSError:[WinError 123]DieSyntaxfürdenDateinamen、VerzeichnisnamenoderdieDatenträgerbezeichnungistfalsch: 'app \ tests.py :: WebServiceTest'
(エラーテキストはドイツ語です)

そして、これは私のpytest.iniファイルです。 取材はありません。

[pytest]
DJANGO_SETTINGS_MODULE = DjangoBasisLager.settings
python_files = tests.py tests _ *。py * _tests.py

問題は、テストファイルへのパスにあります。

完全なエラーログ:
(DjangoBasisLager--RYvLsCA)PS C:UsersLubitzworkspacebasislagerDjangoBasisLager> pytest。\ app \ tests.py :: WebServiceTest
トレースバック(最後の最後の呼び出し):
_run_module_as_mainのファイル "C:Program FilesPython36Librunpy.py"、行193
"__main __"、mod_spec)
_run_codeのファイル「C:ProgramFilesPython36Librunpy.py」、85行目
exec(code、run_globals)
ファイル「C:UsersLubitz.virtualenvsDjangoBasisLager--RYvLsCAScriptspytest.exe__main __。py」、9行目
ファイル "c:userslubitz.virtualenvsdjangobasislager--ryvlscalibsite-packages_pytestconfig__init__。py"、行56、メイン
config = _prepareconfig(args、plugins)
ファイル "c:userslubitz.virtualenvsdjangobasislager--ryvlscalibsite-packages_pytestconfig__init__。py"、行181、_prepareconfig
pluginmanager = pluginmanager、args = args
ファイル "c:userslubitz.virtualenvsdjangobasislager--ryvlscalibsite-packagespluggyhooks.py"、行258、__ call__
self._hookexec(self、self._nonwrappers + self._wrappers、kwargs)を返します
_hookexecのファイル "c:userslubitz.virtualenvsdjangobasislager--ryvlscalibsite-packagespluggymanager.py"、67行目
self._inner_hookexec(hook、methods、kwargs)を返します
ファイル "c:userslubitz.virtualenvsdjangobasislager--ryvlscalibsite-packagespluggymanager.py"、行61、
firstresult = hook.spec_opts.get( 'firstresult')、
ファイル "c:userslubitz.virtualenvsdjangobasislager--ryvlscalibsite-packagespluggycallers.py"、行196、_multicall
gen.send(結果)
pytest_cmdline_parseのファイル "c:userslubitz.virtualenvsdjangobasislager--ryvlscalibsite-packages_pytesthelpconfig.py"、行89
config = results.get_result()
get_resultのファイル「c:userslubitz.virtualenvsdjangobasislager--ryvlscalibsite-packagespluggycallers.py」、76行目
ex [1] .with_traceback(ex [2])を発生させます
ファイル "c:userslubitz.virtualenvsdjangobasislager--ryvlscalibsite-packagespluggycallers.py"、行180、_multicall
res = hook_impl.function( args)ファイル "c:userslubitz.virtualenvsdjangobasislager--ryvlscalibsite-packages_pytestconfig__init__。py"、行617、pytest_cmdline_parseself.parse(args)ファイル "c:userslubitz.virtualenvsdjangobasislager--ryvlscalibsite-packages_pytestconfig__init__。py"、行782、解析中self._preparse(args、addopts = addopts)ファイル "c:userslubitz.virtualenvsdjangobasislager--ryvlscalibsite-packages_pytestconfig__init __。py"、744行目、_preparseEarly_config = self、args = args、parser = self._parserファイル "c:userslubitz.virtualenvsdjangobasislager--ryvlscalibsite-packagespluggyhooks.py"、行258、__ call__self._hookexec(self、self._nonwrappers + self._wrappers、kwargs)を返します_hookexecのファイル "c:userslubitz.virtualenvsdjangobasislager--ryvlscalibsite-packagespluggymanager.py"、67行目self._inner_hookexec(hook、methods、kwargs)を返しますファイル "c:userslubitz.virtualenvsdjangobasislager--ryvlscalibsite-packagespluggymanager.py"、行61、






args)
pytest_load_initial_conftestsのファイル "C:UsersLubitz.virtualenvsDjangoBasisLager--RYvLsCAlibsite-packagespytest_djangoplugin.py"、行209
_django_project_scan_outcome = _add_django_project_to_path(args)
ファイル "C:UsersLubitz.virtualenvsDjangoBasisLager--RYvLsCAlibsite-packagespytest_djangoplugin.py"、行140、_add_django_project_to_path
project_dir = find_django_path(args)
ファイル「C:UsersLubitz.virtualenvsDjangoBasisLager--RYvLsCAlibsite-packagespytest_djangoplugin.py」、127行目、find_django_path
args = [p.is_dir()の場合、args内のpのp]
ファイル「C:UsersLubitz.virtualenvsDjangoBasisLager--RYvLsCAlibsite-packagespytest_djangoplugin.py」、127行目
args = [p.is_dir()の場合、args内のpのp]
is_dir内のファイル「C:ProgramFilesPython36Libpathlib.py」、1346行目
S_ISDIR(self.stat()。st_mode)を返します
ファイル「C:ProgramFilesPython36Libpathlib.py」、1156行目、統計
self._accessor.stat(self)を返します
ファイル「C:ProgramFilesPython36Libpathlib.py」、387行目、ラップ済み
strfunc(str(pathobj)、* args)を返します
OSError:[WinError 123]DieSyntaxfürdenDateinamen、VerzeichnisnamenoderdieDatenträgerbezeichnungistfalsch: 'app \ tests.py :: WebServiceTest'

ああ、なるほど..通常の引数でトリガーされます。

@voidus
これを修正することを検討してもらえますか?

こんにちは私は問題を解決するために何らかの方法で助けることができますか? テストできるブランチはありますか、それとも問題を調べて修正する必要がありますか?

@ pinguin999
テストするものはありません。
これは、追加されるpathlibコードに関連しています(スタックトレースを参照)。
PRに修正を提供できれば素晴らしいと思います。

@ pinguin999このエラーの原因は正確には::WebServiceTest )が原因である可能性があります。

テストを実行する前にその部分を分割するブランチを作成しました。開発セットアップが利用可能なWindowsマシンがないため、試してみるとよいでしょう。 https://github.com/voidus/pytest-djangoのフォークのoserror_pathlibブランチにあります。

https://github.com/voidus/pytest-django/tree/oserror_pathlib

はい、どうやら引数の「:」はWindowsでベイルアウトします。
パッチは問題ないと思います。https://github.com/pytest-dev/pytest-django/pull/648を使用して作成しました。

こんにちは
すみません、私は休日でした。
3.4.3にアップデートしましたが、機能しています。

ありがとうございました

#このコード行を削除====== 'module_name'、
INSTALLED_APPSリストから

さて、これは私にも起こりました。
まず、プロジェクトフォルダでアプリを起動していることを確認します
例:
"django-admin startprojectWebサイト
CDウェブサイト
django-admin startapp music "

このページは役に立ちましたか?
0 / 5 - 0 評価