Pytest-django: Windows : OSError : [WinError 123] en raison de modifications de pathlib

Créé le 29 août 2018  ·  12Commentaires  ·  Source: pytest-dev/pytest-django

Mon pytest.ini a le contenu suivant :

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

Je pense que le chemin de type Unix transmis à --cov-report fait planter la dernière version de pytest-django sous Windows. (Parce que c'est dans un fichier .ini , je ne connais aucun moyen indépendant de la plate-forme de le spécifier).

Voici le traceback qui s'affiche lors de l'exécution de 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

Tous les 12 commentaires

Cela semble être dû au passage à pathlib.

/cc @voidus

Essayez --cov-report=html:./coverage/python/html comme solution de contournement.

Salut j'ai aussi le problème avec pytest .\app\tests.py::WebServiceTest

La solution de contournement fonctionne-t-elle ?

salut
OSError : [WinError 123] Die Syntax für den Dateinamen, Verzeichnisnamen oder die Datenträgerbezeichnung ist falsch : 'app\tests.py::WebServiceTest'
(le texte d'erreur est en allemand)

Et voici mon fichier pytest.ini. Pas de trucs de couverture.

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

Le problème vient du chemin d'accès au fichier de test.

Journal d'erreurs complet :
(DjangoBasisLager--RYvLsCA) PS C:UsersLubitzworkspacebasislagerDjangoBasisLager> pytest .\app\tests.py::WebServiceTest
Traceback (appel le plus récent en dernier) :
Fichier "C:Program FilesPython36Librunpy.py", ligne 193, dans _run_module_as_main
"__main__", mod_spec)
Fichier "C:Program FilesPython36Librunpy.py", ligne 85, dans _run_code
exec(code, run_globals)
Fichier "C:UsersLubitz.virtualenvsDjangoBasisLager--RYvLsCAScriptspytest.exe__main__.py", ligne 9, dans
Fichier "c:userslubitz.virtualenvsdjangobasislager--ryvlscalibsite-packages_pytestconfig__init__.py", ligne 56, dans main
config = _prepareconfig(args, plugins)
Fichier "c:userslubitz.virtualenvsdjangobasislager--ryvlscalibsite-packages_pytestconfig__init__.py", ligne 181, dans _prepareconfig
pluginmanager=pluginmanager, args=args
Fichier "c:userslubitz.virtualenvsdjangobasislager--ryvlscalibsite-packagespluggyhooks.py", ligne 258, dans __call__
return self._hookexec(self, self._nonwrappers + self._wrappers, kwargs)
Fichier "c:userslubitz.virtualenvsdjangobasislager--ryvlscalibsite-packagespluggymanager.py", ligne 67, dans _hookexec
return self._inner_hookexec(hook, méthodes, kwargs)
Fichier "c:userslubitz.virtualenvsdjangobasislager--ryvlscalibsite-packagespluggymanager.py", ligne 61, dans
firstresult=hook.spec_opts.get('firstresult'),
Fichier "c:userslubitz.virtualenvsdjangobasislager--ryvlscalibsite-packagespluggycallers.py", ligne 196, dans _multicall
gen.send (résultat)
Fichier "c:userslubitz.virtualenvsdjangobasislager--ryvlscalibsite-packages_pytesthelpconfig.py", ligne 89, dans pytest_cmdline_parse
config = resultat.get_result()
Fichier "c:userslubitz.virtualenvsdjangobasislager--ryvlscalibsite-packagespluggycallers.py", ligne 76, dans get_result
augmenter ex[1].with_traceback(ex[2])
Fichier "c:userslubitz.virtualenvsdjangobasislager--ryvlscalibsite-packagespluggycallers.py", ligne 180, dans _multicall
res = hook_impl.function( args)Fichier "c:userslubitz.virtualenvsdjangobasislager--ryvlscalibsite-packages_pytestconfig__init__.py", ligne 617, dans pytest_cmdline_parseself.parse(args)Fichier "c:userslubitz.virtualenvsdjangobasislager--ryvlscalibsite-packages_pytestconfig__init__.py", ligne 782, en parseself._preparse(args, addopts=addopts)Fichier "c:userslubitz.virtualenvsdjangobasislager--ryvlscalibsite-packages_pytestconfig__init__.py", ligne 744, dans _preparseearly_config=self, args=args, parser=self._parserFichier "c:userslubitz.virtualenvsdjangobasislager--ryvlscalibsite-packagespluggyhooks.py", ligne 258, dans __call__return self._hookexec(self, self._nonwrappers + self._wrappers, kwargs)Fichier "c:userslubitz.virtualenvsdjangobasislager--ryvlscalibsite-packagespluggymanager.py", ligne 67, dans _hookexecreturn self._inner_hookexec(hook, méthodes, kwargs)Fichier "c:userslubitz.virtualenvsdjangobasislager--ryvlscalibsite-packagespluggymanager.py", ligne 61, dans






arguments)
Fichier "C:UsersLubitz.virtualenvsDjangoBasisLager--RYvLsCAlibsite-packagespytest_djangoplugin.py", ligne 209, dans pytest_load_initial_conftests
_django_project_scan_outcome = _add_django_project_to_path(args)
Fichier "C:UsersLubitz.virtualenvsDjangoBasisLager--RYvLsCAlibsite-packagespytest_djangoplugin.py", ligne 140, dans _add_django_project_to_path
project_dir = find_django_path(args)
Fichier "C:UsersLubitz.virtualenvsDjangoBasisLager--RYvLsCAlibsite-packagespytest_djangoplugin.py", ligne 127, dans find_django_path
args = [p pour p dans args si p.is_dir()]
Fichier "C:UsersLubitz.virtualenvsDjangoBasisLager--RYvLsCAlibsite-packagespytest_djangoplugin.py", ligne 127, dans
args = [p pour p dans args si p.is_dir()]
Fichier "C:Program FilesPython36Libpathlib.py", ligne 1346, dans is_dir
renvoie S_ISDIR(self.stat().st_mode)
Fichier "C:Program FilesPython36Libpathlib.py", ligne 1156, dans stat
retourner self._accessor.stat(self)
Fichier "C:Program FilesPython36Libpathlib.py", ligne 387, en wrap
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, je vois... il se déclenche pour vous pour un argument normal.

@voidu
Pouvez-vous envisager de résoudre ce problème, s'il vous plaît?

Bonjour, puis-je aider de quelque manière que ce soit à résoudre le problème ? Y a-t-il un brunch que je peux tester ou dois-je examiner le problème pour le résoudre ?

@pinguin999
Rien à tester.
Il est lié au code pathlib en cours d'ajout (voir votre stacktrace).
Ce serait formidable si vous pouviez fournir une solution à un RP.

@pinguin999 Je ne sais pas exactement quelle est la cause de cette erreur, mais je soupçonne que la spécification de la classe de test ( ::WebServiceTest ) pourrait l'être.

J'ai créé une branche où cette partie est séparée avant d'exécuter les tests et ce serait formidable si vous pouviez l'essayer, car je n'ai pas de machine Windows avec une configuration de développement disponible. Vous pouvez le trouver dans la branche oserror_pathlib de mon fork à l' adresse https://github.com/voidus/pytest-django.

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

Oui, apparemment, le ":" dans l'argument se sauve sous Windows.
Je pense que votre patch est bon, j'ai créé https://github.com/pytest-dev/pytest-django/pull/648 avec.

salut
désolé j'étais en vacances.
J'ai mis à jour vers 3.4.3 et ça marche.

Merci

# supprime cette ligne de code ====== 'module_name',
de la liste INSTALLED_APPS

Bon ça m'est arrivé aussi.
Assurez-vous d'abord que vous démarrez l'application dans le dossier du projet
par exemple :
"django-admin startproject website
site de CD
django-admin startapp musique"

Cette page vous a été utile?
0 / 5 - 0 notes