Pytest-django: Windows: OSError: [WinError 123] из-за изменений pathlib

Созданный на 29 авг. 2018  ·  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

Я считаю, что путь в стиле Unix, переданный к --cov-report , вызывает сбой последней версии 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'

Все 12 Комментарий

Похоже, это связано с переключением на pathlib.

/ cc @voidus

Попробуйте --cov-report=html:./coverage/python/html в качестве обходного пути.

Привет, у меня тоже проблема с pytest. \ App \ tests.py :: WebServiceTest

Работает ли обходной путь?

Привет
OSError: [WinError 123] Синтаксис для даты и даты, Verzeichnisnamen или Die Datenträgerbezeichnung ist falsch: 'app \ tests.py :: WebServiceTest'
(текст ошибки немецкий)

А это мой файл pytest.ini. Никакого покрытия.

[pytest]
DJANGO_SETTINGS_MODULE = DjangoBasisLager.settings
python_files = tests.py тесты _ *. py * _tests.py

Проблема в пути к тестовому файлу.

Полный журнал ошибок:
(DjangoBasisLager - RYvLsCA) PS C: UsersLubitzworkspacebasislagerDjangoBasisLager> pytest. \ App \ tests.py :: WebServiceTest
Отслеживание (последний вызов последний):
Файл «C: Program FilesPython36Librunpy.py», строка 193, в _run_module_as_main
"__main__", mod_spec)
Файл "C: Program FilesPython36Librunpy.py", строка 85, в _run_code
exec (код, run_globals)
Файл "C: UsersLubitz.virtualenvsDjangoBasisLager - RYvLsCAScriptspytest.exe__main __. Py", строка 9, в
Файл "c: userslubitz.virtualenvsdjangobasislager - ryvlscalibsite-packages_pytestconfig__init __. Py", строка 56, в основном
config = _prepareconfig (аргументы, плагины)
Файл "c: userslubitz.virtualenvsdjangobasislager - ryvlscalibsite-packages_pytestconfig__init __. Py", строка 181, в _prepareconfig
pluginmanager = pluginmanager, args = args
Файл "c: userslubitz.virtualenvsdjangobasislager--ryvlscalibsite-packagespluggyhooks.py", строка 258, в __call__
return self._hookexec (self, self._nonwrappers + self._wrappers, kwargs)
Файл "c: userslubitz.virtualenvsdjangobasislager--ryvlscalibsite-packagespluggymanager.py", строка 67, в _hookexec
return self._inner_hookexec (ловушка, методы, kwargs)
Файл "c: userslubitz.virtualenvsdjangobasislager--ryvlscalibsite-packagespluggymanager.py", строка 61, в
firstresult = hook.spec_opts.get ('первый результат'),
Файл "c: userslubitz.virtualenvsdjangobasislager--ryvlscalibsite-packagespluggycallers.py", строка 196, в _multicall
gen.send (результат)
Файл "c: userslubitz.virtualenvsdjangobasislager--ryvlscalibsite-packages_pytesthelpconfig.py", строка 89, в pytest_cmdline_parse
config = результат.get_result ()
Файл "c: userslubitz.virtualenvsdjangobasislager--ryvlscalibsite-packagespluggycallers.py", строка 76, в get_result
поднять ex [1] .with_traceback (ex [2])
Файл "c: userslubitz.virtualenvsdjangobasislager--ryvlscalibsite-packagespluggycallers.py", строка 180, в _multicall
res = hook_impl.function ( аргументы)Файл "c: userslubitz.virtualenvsdjangobasislager - ryvlscalibsite-packages_pytestconfig__init __. Py", строка 617, в pytest_cmdline_parseself.parse (аргументы)Файл "c: userslubitz.virtualenvsdjangobasislager - ryvlscalibsite-packages_pytestconfig__init __. Py", строка 782, в синтаксическом анализеself._preparse (аргументы, 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__return self._hookexec (self, self._nonwrappers + self._wrappers, kwargs)Файл "c: userslubitz.virtualenvsdjangobasislager--ryvlscalibsite-packagespluggymanager.py", строка 67, в _hookexecreturn self._inner_hookexec (ловушка, методы, kwargs)Файл "c: userslubitz.virtualenvsdjangobasislager--ryvlscalibsite-packagespluggymanager.py", строка 61, в






аргументы)
Файл "C: UsersLubitz.virtualenvsDjangoBasisLager--RYvLsCAlibsite-packagespytest_djangoplugin.py", строка 209, в pytest_load_initial_conftests
_django_project_scan_outcome = _add_django_project_to_path (аргументы)
Файл "C: UsersLubitz.virtualenvsDjangoBasisLager--RYvLsCAlibsite-packagespytest_djangoplugin.py", строка 140, в _add_django_project_to_path
project_dir = find_django_path (аргументы)
Файл "C: UsersLubitz.virtualenvsDjangoBasisLager--RYvLsCAlibsite-packagespytest_djangoplugin.py", строка 127, в find_django_path
args = [p вместо p в args, если p.is_dir ()]
Файл "C: UsersLubitz.virtualenvsDjangoBasisLager--RYvLsCAlibsite-packagespytest_djangoplugin.py", строка 127, в
args = [p вместо p в args, если p.is_dir ()]
Файл «C: Program FilesPython36Libpathlib.py», строка 1346, в is_dir
вернуть S_ISDIR (self.stat (). st_mode)
Файл "C: Program FilesPython36Libpathlib.py", строка 1156, в stat
вернуть self._accessor.stat (self)
Файл "C: Program FilesPython36Libpathlib.py", строка 387, в оболочке
вернуть strfunc (str (pathobj), * args)
OSError: [WinError 123] Синтаксис для даты и даты, Verzeichnisnamen или Die Datenträgerbezeichnung ist falsch: 'app \ tests.py :: WebServiceTest'

Ах, понятно .. это срабатывает для вас при нормальном аргументе.

@voidus
Можете ли вы исправить это, пожалуйста?

Привет, могу я чем-нибудь помочь решить проблему? Есть ли бранч, который я могу протестировать, или мне нужно изучить проблему, чтобы исправить это?

@ pinguin999
Нечего тестировать.
Это связано с добавляемым кодом pathlib (см. Вашу трассировку стека).
Было бы здорово, если бы вы могли предоставить PR с исправлением.

@ pinguin999 Я не совсем уверен, в чем причина этой ошибки, но подозреваю, что это может быть спецификация тестового класса ( ::WebServiceTest ).

Я создал ветку, в которой эта часть отделяется перед запуском тестов, и было бы здорово, если бы вы могли ее попробовать, так как у меня нет Windows-машины с доступной настройкой для разработчиков. Вы можете найти его в ветке oserror_pathlib в моей вилке по адресу https://github.com/voidus/pytest-django.

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 startproject сайт
cd сайт
django-admin startapp music "

Была ли эта страница полезной?
0 / 5 - 0 рейтинги