Pytest-django: Windows: OSError: [WinError 123] devido a alterações de pathlib

Criado em 29 ago. 2018  ·  12Comentários  ·  Fonte: pytest-dev/pytest-django

Meu pytest.ini tem o seguinte conteúdo:

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

Acredito que o caminho semelhante ao Unix passado para --cov-report está fazendo com que a versão mais recente do pytest-django trave no Windows. (Como está em um arquivo .ini , não conheço nenhuma maneira independente de plataforma de especificá-lo).

Aqui está o traceback que é exibido ao executar 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 comentários

Parece ser devido à mudança para pathlib.

/ cc @voidus

Tente --cov-report=html:./coverage/python/html como uma solução alternativa.

Olá, também tenho problemas com pytest. \ App \ tests.py :: WebServiceTest

A solução alternativa funciona?

Oi
OSError: [WinError 123] Die Syntax für den Dateinamen, Verzeichnisnamen oder die Datenträgerbezeichnung ist falsch: 'app \ tests.py :: WebServiceTest'
(o texto do erro é alemão)

E este é meu arquivo pytest.ini. Sem material de cobertura.

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

O problema é com o caminho para o arquivo de teste.

Registro de erros completo:
(DjangoBasisLager - RYvLsCA) PS C: UsersLubitzworkspacebasislagerDjangoBasisLager> pytest. \ App \ tests.py :: WebServiceTest
Traceback (última chamada mais recente):
Arquivo "C: Program FilesPython36Librunpy.py", linha 193, em _run_module_as_main
"__main__", mod_spec)
Arquivo "C: Program FilesPython36Librunpy.py", linha 85, em _run_code
exec (código, run_globals)
Arquivo "C: UsersLubitz.virtualenvsDjangoBasisLager - RYvLsCAScriptspytest.exe__main __. Py", linha 9, em
Arquivo "c: userslubitz.virtualenvsdjangobasislager - ryvlscalibsite-packages_pytestconfig__init __. Py", linha 56, no principal
config = _prepareconfig (args, plug-ins)
Arquivo "c: userslubitz.virtualenvsdjangobasislager - ryvlscalibsite-packages_pytestconfig__init __. Py", linha 181, em _prepareconfig
pluginmanager = pluginmanager, args = args
Arquivo "c: userslubitz.virtualenvsdjangobasislager--ryvlscalibsite-packagespluggyhooks.py", linha 258, em __call__
return self._hookexec (self, self._nonwrappers + self._wrappers, kwargs)
Arquivo "c: userslubitz.virtualenvsdjangobasislager--ryvlscalibsite-packagespluggymanager.py", linha 67, em _hookexec
return self._inner_hookexec (gancho, métodos, kwargs)
Arquivo "c: userslubitz.virtualenvsdjangobasislager--ryvlscalibsite-packagespluggymanager.py", linha 61, em
firstresult = hook.spec_opts.get ('firstresult'),
Arquivo "c: userslubitz.virtualenvsdjangobasislager--ryvlscalibsite-packagespluggycallers.py", linha 196, em _multicall
gen.send (resultado)
Arquivo "c: userslubitz.virtualenvsdjangobasislager--ryvlscalibsite-packages_pytesthelpconfig.py", linha 89, em pytest_cmdline_parse
config = desfecho.get_result ()
Arquivo "c: userslubitz.virtualenvsdjangobasislager--ryvlscalibsite-packagespluggycallers.py", linha 76, em get_result
levantar ex [1] .with_traceback (ex [2])
Arquivo "c: userslubitz.virtualenvsdjangobasislager--ryvlscalibsite-packagespluggycallers.py", linha 180, em _multicall
res = hook_impl.function ( args)Arquivo "c: userslubitz.virtualenvsdjangobasislager - ryvlscalibsite-packages_pytestconfig__init __. Py", linha 617, em pytest_cmdline_parseself.parse (args)Arquivo "c: userslubitz.virtualenvsdjangobasislager - ryvlscalibsite-packages_pytestconfig__init __. Py", linha 782, em análiseself._preparse (args, addopts = addopts)Arquivo "c: userslubitz.virtualenvsdjangobasislager - ryvlscalibsite-packages_pytestconfig__init __. Py", linha 744, em _prepararearly_config = self, args = args, parser = self._parserArquivo "c: userslubitz.virtualenvsdjangobasislager--ryvlscalibsite-packagespluggyhooks.py", linha 258, em __call__return self._hookexec (self, self._nonwrappers + self._wrappers, kwargs)Arquivo "c: userslubitz.virtualenvsdjangobasislager--ryvlscalibsite-packagespluggymanager.py", linha 67, em _hookexecreturn self._inner_hookexec (gancho, métodos, kwargs)Arquivo "c: userslubitz.virtualenvsdjangobasislager--ryvlscalibsite-packagespluggymanager.py", linha 61, em






args)
Arquivo "C: UsersLubitz.virtualenvsDjangoBasisLager--RYvLsCAlibsite-packagespytest_djangoplugin.py", linha 209, em pytest_load_initial_conftests
_django_project_scan_outcome = _add_django_project_to_path (args)
Arquivo "C: UsersLubitz.virtualenvsDjangoBasisLager--RYvLsCAlibsite-packagespytest_djangoplugin.py", linha 140, em _add_django_project_to_path
project_dir = find_django_path (args)
Arquivo "C: UsersLubitz.virtualenvsDjangoBasisLager--RYvLsCAlibsite-packagespytest_djangoplugin.py", linha 127, em find_django_path
args = [p para p em args se p.is_dir ()]
Arquivo "C: UsersLubitz.virtualenvsDjangoBasisLager--RYvLsCAlibsite-packagespytest_djangoplugin.py", linha 127, em
args = [p para p em args se p.is_dir ()]
Arquivo "C: Program FilesPython36Libpathlib.py", linha 1346, em is_dir
retornar S_ISDIR (self.stat (). st_mode)
Arquivo "C: Program FilesPython36Libpathlib.py", linha 1156, em stat
return self._accessor.stat (self)
Arquivo "C: Program FilesPython36Libpathlib.py", linha 387, embrulhado
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, entendo .. ele é acionado para você por um argumento normal.

@voidus
Você pode consertar isso, por favor?

Oi posso ajudar de alguma forma a resolver o problema? Há um brunch que eu possa testar ou devo investigar o problema para corrigi-lo?

@ pinguin999
Nada para testar.
Está relacionado ao código pathlib que está sendo adicionado (veja seu stacktrace).
Seria ótimo se você pudesse fornecer uma correção para um PR.

@ pinguin999 Não tenho certeza de qual é a causa desse erro, mas suspeito que a especificação da classe de teste ( ::WebServiceTest ) pode ser isso.

Eu criei um branch onde essa parte é separada antes de executar os testes e seria ótimo se você pudesse tentar, já que não tenho uma máquina Windows com uma configuração de desenvolvimento disponível. Você pode encontrá-lo no branch oserror_pathlib em meu fork em https://github.com/voidus/pytest-django.

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

Sim, aparentemente o ":" no argumento não funciona no Windows.
Acho que seu patch está bom, criei https://github.com/pytest-dev/pytest-django/pull/648 com ele.

Oi
desculpe, eu estava de férias.
Eu atualizei para 3.4.3 e está funcionando.

Obrigada

# remova esta linha de código ====== 'module_name',
da lista INSTALLED_APPS

Bem, isso aconteceu comigo também.
Em primeiro lugar, certifique-se de que você está iniciando o aplicativo na pasta do projeto
por exemplo:
"django-admin startproject website
site de cd
django-admin startapp music "

Esta página foi útil?
0 / 5 - 0 avaliações

Questões relacionadas

tolomea picture tolomea  ·  4Comentários

scherrey picture scherrey  ·  6Comentários

clintonb picture clintonb  ·  4Comentários

mjk4 picture mjk4  ·  4Comentários

MRigal picture MRigal  ·  3Comentários