Pytest-django: Windows: OSError: [WinError 123] debido a cambios de pathlib

Creado en 29 ago. 2018  ·  12Comentarios  ·  Fuente: pytest-dev/pytest-django

Mi pytest.ini tiene el siguiente contenido:

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

Creo que la ruta similar a Unix pasada a --cov-report está causando que la última versión de pytest-django se bloquee en Windows. (Debido a que está en un archivo .ini , no conozco ninguna forma independiente de la plataforma para especificarlo).

Aquí está el rastreo que se muestra cuando se ejecuta 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

Todos 12 comentarios

Parece deberse al cambio a pathlib.

/ cc @voidus

Pruebe --cov-report=html:./coverage/python/html como solución.

Hola, también tengo el problema con pytest. \ App \ tests.py :: WebServiceTest

¿Funciona la solución?

Hola
OSError: [WinError 123] Die Syntax für den Dateinamen, Verzeichnisnamen oder die Datenträgerbezeichnung ist falsch: 'app \ tests.py :: WebServiceTest'
(el texto del error es alemán)

Y este es mi archivo pytest.ini. Sin cosas de cobertura.

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

El problema está en la ruta al archivo de prueba.

Registro de errores completo:
(DjangoBasisLager - RYvLsCA) PS C: UsersLubitzworkspacebasislagerDjangoBasisLager> pytest. \ App \ tests.py :: WebServiceTest
Rastreo (llamadas recientes más última):
Archivo "C: Program FilesPython36Librunpy.py", línea 193, en _run_module_as_main
"__main__", mod_spec)
Archivo "C: Program FilesPython36Librunpy.py", línea 85, en _run_code
exec (código, run_globals)
Archivo "C: UsersLubitz.virtualenvsDjangoBasisLager - RYvLsCAScriptspytest.exe__main __. Py", línea 9, en
Archivo "c: userslubitz.virtualenvsdjangobasislager - ryvlscalibsite-packages_pytestconfig__init __. Py", línea 56, en main
config = _prepareconfig (argumentos, complementos)
Archivo "c: userslubitz.virtualenvsdjangobasislager - ryvlscalibsite-packages_pytestconfig__init __. Py", línea 181, en _prepareconfig
pluginmanager = pluginmanager, args = args
Archivo "c: userslubitz.virtualenvsdjangobasislager--ryvlscalibsite-packagespluggyhooks.py", línea 258, en __call__
return self._hookexec (self, self._nonwrappers + self._wrappers, kwargs)
Archivo "c: userslubitz.virtualenvsdjangobasislager--ryvlscalibsite-packagespluggymanager.py", línea 67, en _hookexec
return self._inner_hookexec (gancho, métodos, kwargs)
Archivo "c: userslubitz.virtualenvsdjangobasislager--ryvlscalibsite-packagespluggymanager.py", línea 61, en
primer resultado = hook.spec_opts.get ('primer resultado'),
Archivo "c: userslubitz.virtualenvsdjangobasislager--ryvlscalibsite-packagespluggycallers.py", línea 196, en _multicall
gen.send (resultado)
Archivo "c: userslubitz.virtualenvsdjangobasislager--ryvlscalibsite-packages_pytesthelpconfig.py", línea 89, en pytest_cmdline_parse
config = result.get_result ()
Archivo "c: userslubitz.virtualenvsdjangobasislager--ryvlscalibsite-packagespluggycallers.py", línea 76, en get_result
subir ex [1] .with_traceback (ex [2])
Archivo "c: userslubitz.virtualenvsdjangobasislager--ryvlscalibsite-packagespluggycallers.py", línea 180, en _multicall
res = hook_impl.function (argumentos )Archivo "c: userslubitz.virtualenvsdjangobasislager - ryvlscalibsite-packages_pytestconfig__init __. Py", línea 617, en pytest_cmdline_parseself.parse (argumentos)Archivo "c: userslubitz.virtualenvsdjangobasislager - ryvlscalibsite-packages_pytestconfig__init __. Py", línea 782, en parseself._preparse (argumentos, addopts = addopts)Archivo "c: userslubitz.virtualenvsdjangobasislager - ryvlscalibsite-packages_pytestconfig__init __. Py", línea 744, en _preparseearly_config = self, args = args, parser = self._parserArchivo "c: userslubitz.virtualenvsdjangobasislager--ryvlscalibsite-packagespluggyhooks.py", línea 258, en __call__return self._hookexec (self, self._nonwrappers + self._wrappers, kwargs)Archivo "c: userslubitz.virtualenvsdjangobasislager--ryvlscalibsite-packagespluggymanager.py", línea 67, en _hookexecreturn self._inner_hookexec (gancho, métodos, kwargs)Archivo "c: userslubitz.virtualenvsdjangobasislager--ryvlscalibsite-packagespluggymanager.py", línea 61, en






argumentos)
Archivo "C: UsersLubitz.virtualenvsDjangoBasisLager--RYvLsCAlibsite-packagespytest_djangoplugin.py", línea 209, en pytest_load_initial_conftests
_django_project_scan_outcome = _add_django_project_to_path (args)
Archivo "C: UsersLubitz.virtualenvsDjangoBasisLager--RYvLsCAlibsite-packagespytest_djangoplugin.py", línea 140, en _add_django_project_to_path
project_dir = find_django_path (args)
Archivo "C: UsersLubitz.virtualenvsDjangoBasisLager--RYvLsCAlibsite-packagespytest_djangoplugin.py", línea 127, en find_django_path
args = [p para p en argumentos si p.is_dir ()]
Archivo "C: UsersLubitz.virtualenvsDjangoBasisLager--RYvLsCAlibsite-packagespytest_djangoplugin.py", línea 127, en
args = [p para p en argumentos si p.is_dir ()]
Archivo "C: Program FilesPython36Libpathlib.py", línea 1346, en is_dir
return S_ISDIR (self.stat (). st_mode)
Archivo "C: Program FilesPython36Libpathlib.py", línea 1156, en stat
return self._accessor.stat (self)
Archivo "C: Program FilesPython36Libpathlib.py", línea 387, envuelto
devolver strfunc (str (patobj), * args)
OSError: [WinError 123] Die Syntax für den Dateinamen, Verzeichnisnamen oder die Datenträgerbezeichnung ist falsch: 'app \ tests.py :: WebServiceTest'

Ah, ya veo ... se activa para ti por una argumentación normal.

@voidus
¿Puedes arreglar esto, por favor?

Hola, ¿puedo ayudar de alguna manera a solucionar el problema? ¿Hay algún brunch que pueda probar o debería investigar el problema para solucionarlo?

@ pinguin999
Nada que probar.
Está relacionado con el código de la biblioteca de rutas que se está agregando (vea su stacktrace).
Sería genial si pudiera proporcionarle una solución a un PR.

@ pinguin999 No estoy exactamente seguro de cuál es la causa de este error, pero sospecho que la especificación de la clase de prueba ( ::WebServiceTest ) podría ser la misma.

Creé una rama donde esa parte se divide antes de ejecutar las pruebas y sería genial si pudieras probarla, ya que no tengo una máquina con Windows con una configuración de desarrollo disponible. Puede encontrarlo en la rama oserror_pathlib de mi bifurcación en https://github.com/voidus/pytest-django.

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

Sí, aparentemente el ":" en el argumento se rescata en Windows.
Creo que tu parche está bien, he creado https://github.com/pytest-dev/pytest-django/pull/648 con él.

Hola
lo siento, estaba de vacaciones.
Actualicé a 3.4.3 y está funcionando.

Gracias

# eliminar esta línea de código ====== 'nombre_módulo',
de la lista INSTALLED_APPS

Bueno, esto también me pasó a mí.
En primer lugar, asegúrese de que está iniciando la aplicación en la carpeta del proyecto.
por ejemplo:
"sitio web django-admin startproject
sitio web del CD
django-admin startapp music "

¿Fue útil esta página
0 / 5 - 0 calificaciones