Pytest-django: Windows: OSError: [WinError 123] aufgrund von pathlib-Änderungen

Erstellt am 29. Aug. 2018  ·  12Kommentare  ·  Quelle: pytest-dev/pytest-django

Mein pytest.ini hat folgenden Inhalt:

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

Ich glaube, dass der an --cov-report Unix-ähnliche Pfad dazu führt, dass die neueste Version von pytest-django unter Windows abstürzt. (Da es sich in einer .ini Datei befindet, kenne ich keine plattformunabhängige Möglichkeit, es anzugeben).

Hier ist der Traceback, der angezeigt wird, wenn 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

Alle 12 Kommentare

Scheint an der Umstellung auf pathlib zu liegen.

/cc @voidus

Versuchen Sie es mit --cov-report=html:./coverage/python/html als Problemumgehung.

Hallo, ich habe auch das Problem mit pytest .\app\tests.py::WebServiceTest

Funktioniert die Problemumgehung?

Hallo
OSError: [WinError 123] Die Syntax für den Dateinamen, Verzeichnisnamen oder die Datenträgerbezeichnung ist falsch: 'app\tests.py::WebServiceTest'
(Fehlertext ist deutsch)

Und das ist meine pytest.ini-Datei. Keine Deckungssachen.

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

Das Problem liegt am Pfad zur Testdatei.

Vollständiges Fehlerprotokoll:
(DjangoBasisLager--RYvLsCA) PS C:UsersLubitzworkspacebasislagerDjangoBasisLager> pytest .\app\tests.py::WebServiceTest
Traceback (letzter Anruf zuletzt):
Datei "C:Program FilesPython36Librunpy.py", Zeile 193, in _run_module_as_main
"__main__", mod_spec)
Datei "C:ProgrammePython36Librunpy.py", Zeile 85, in _run_code
exec(code, run_globals)
Datei "C:UsersLubitz.virtualenvsDjangoBasisLager--RYvLsCAScriptspytest.exe__main__.py", Zeile 9, in
Datei "c:userslubitz.virtualenvsdjangobasislager--ryvlscalibsite-packages_pytestconfig__init__.py", Zeile 56, in main
config = _prepareconfig(Argumente, Plugins)
Datei "c:userslubitz.virtualenvsdjangobasislager--ryvlscalibsite-packages_pytestconfig__init__.py", Zeile 181, in _prepareconfig
pluginmanager=pluginmanager, args=args
Datei "c:userslubitz.virtualenvsdjangobasislager--ryvlscalibsite-packagespluggyhooks.py", Zeile 258, in __call__
return self._hookexec(self, self._nonwrappers + self._wrappers, kwargs)
Datei "c:userslubitz.virtualenvsdjangobasislager--ryvlscalibsite-packagespluggymanager.py", Zeile 67, in _hookexec
return self._inner_hookexec(Hook, Methoden, Kwargs)
Datei "c:userslubitz.virtualenvsdjangobasislager--ryvlscalibsite-packagespluggymanager.py", Zeile 61, in
firstresult=hook.spec_opts.get('firstresult'),
Datei "c:userslubitz.virtualenvsdjangobasislager--ryvlscalibsite-packagespluggycallers.py", Zeile 196, in _multicall
gen.senden (Ergebnis)
Datei "c:userslubitz.virtualenvsdjangobasislager--ryvlscalibsite-packages_pytesthelpconfig.py", Zeile 89, in pytest_cmdline_parse
config = result.get_result()
Datei "c:userslubitz.virtualenvsdjangobasislager--ryvlscalibsite-packagespluggycallers.py", Zeile 76, in get_result
erhöhen ex[1].with_traceback(ex[2])
Datei "c:userslubitz.virtualenvsdjangobasislager--ryvlscalibsite-packagespluggycallers.py", Zeile 180, in _multicall
res = hook_impl.function( args)Datei "c:userslubitz.virtualenvsdjangobasislager--ryvlscalibsite-packages_pytestconfig__init__.py", Zeile 617, in pytest_cmdline_parseself.parse(args)Datei "c:userslubitz.virtualenvsdjangobasislager--ryvlscalibsite-packages_pytestconfig__init__.py", Zeile 782, in Parseself._preparse(args, addopts=addopts)Datei "c:userslubitz.virtualenvsdjangobasislager--ryvlscalibsite-packages_pytestconfig__init__.py", Zeile 744, in _preparsefrühe_config=self, args=args, parser=self._parserDatei "c:userslubitz.virtualenvsdjangobasislager--ryvlscalibsite-packagespluggyhooks.py", Zeile 258, in __call__return self._hookexec(self, self._nonwrappers + self._wrappers, kwargs)Datei "c:userslubitz.virtualenvsdjangobasislager--ryvlscalibsite-packagespluggymanager.py", Zeile 67, in _hookexecreturn self._inner_hookexec(Hook, Methoden, Kwargs)Datei "c:userslubitz.virtualenvsdjangobasislager--ryvlscalibsite-packagespluggymanager.py", Zeile 61, in






Argumente)
Datei "C:UsersLubitz.virtualenvsDjangoBasisLager--RYvLsCAlibsite-packagespytest_djangoplugin.py", Zeile 209, in pytest_load_initial_conftests
_django_project_scan_outcome = _add_django_project_to_path(args)
Datei "C:UsersLubitz.virtualenvsDjangoBasisLager--RYvLsCAlibsite-packagespytest_djangoplugin.py", Zeile 140, in _add_django_project_to_path
project_dir = find_django_path(args)
Datei "C:UsersLubitz.virtualenvsDjangoBasisLager--RYvLsCAlibsite-packagespytest_djangoplugin.py", Zeile 127, in find_django_path
args = [p für p in args if p.is_dir()]
Datei "C:UsersLubitz.virtualenvsDjangoBasisLager--RYvLsCAlibsite-packagespytest_djangoplugin.py", Zeile 127, in
args = [p für p in args if p.is_dir()]
Datei "C:Program FilesPython36Libpathlib.py", Zeile 1346, in is_dir
S_ISDIR(self.stat().st_mode) zurückgeben
Datei "C:Program FilesPython36Libpathlib.py", Zeile 1156, in stat
return self._accessor.stat(self)
Datei "C:Program FilesPython36Libpathlib.py", Zeile 387, verpackt
return strfunc(str(pathobj), *args)
OSError: [WinError 123] Die Syntax für den Dateinamen, Verzeichnisnamen oder die Datenträgerbezeichnung ist falsch: 'app\tests.py::WebServiceTest'

Ah, ich verstehe.. es wird für Sie für ein normales Argument ausgelöst.

@voidus
Können Sie das bitte beheben?

Hallo, kann ich irgendwie helfen das Problem zu beheben? Gibt es einen Brunch, den ich testen kann oder sollte ich das Problem untersuchen, um es zu beheben?

@pinguin999
Nichts zu testen.
Es hängt mit dem hinzugefügten pathlib-Code zusammen (siehe Ihren Stacktrace).
Wäre toll, wenn du eine PR mit einem Fix zur Verfügung stellen könntest.

@pinguin999 Ich bin mir nicht ganz sicher, was die Ursache für diesen Fehler ist, aber ich vermute, dass die ::WebServiceTest ) daran liegen könnte.

Ich habe einen Zweig erstellt, in dem dieser Teil vor dem Ausführen der Tests abgespalten wird, und es wäre großartig, wenn Sie ihn ausprobieren könnten, da ich keinen Windows-Rechner mit einem verfügbaren Entwickler-Setup habe. Sie finden es im Zweig oserror_pathlib in meinem Fork unter https://github.com/voidus/pytest-django.

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

Ja, anscheinend rettet das ":" im Arg unter Windows.
Ich denke, dein Patch ist in Ordnung, ich habe damit https://github.com/pytest-dev/pytest-django/pull/648 erstellt.

Hallo
tut mir leid, dass ich im Urlaub war.
Ich habe auf 3.4.3 aktualisiert und es funktioniert.

Danke

# diese Codezeile entfernen ====== 'Modulname',
aus der INSTALLED_APPS-Liste

Nun, das ist mir auch passiert.
Stellen Sie zunächst sicher, dass Sie die App im Projektordner starten
für zB:
"django-admin startproject website
CD-Website
django-admin startapp musik"

War diese Seite hilfreich?
0 / 5 - 0 Bewertungen

Verwandte Themen

rodrigorodriguescosta picture rodrigorodriguescosta  ·  4Kommentare

asfaltboy picture asfaltboy  ·  5Kommentare

zsoldosp picture zsoldosp  ·  5Kommentare

ojake picture ojake  ·  6Kommentare

blueyed picture blueyed  ·  7Kommentare