Как передать * .py в pycco через tox? - PullRequest
0 голосов
/ 25 мая 2020

Работает следующая команда:

$ pycco *.py
# generates literate-style documentation
# for all .py files in the current folder

И следующий фрагмент в моем файле tox.ini работает должным образом:

[testenv:pycco]
deps =
    pycco
commands =
    pycco manage.py
# generates literate-style documentation
# for manage.py

Но если я попытаюсь использовать глобус:

[testenv:pycco]
deps =
    pycco
commands =
    pycco *.py

... Я получаю следующую ошибку:

  File "/home/user/Documents/project/.tox/pycco/lib/python3.7/site-packages/pycco/main.py", line 79, in generate_documentation
    code = open(source, "rb").read().decode(encoding)
FileNotFoundError: [Errno 2] No such file or directory: '*.py'

Как передать *.py в pycco через tox?

Ответы [ 2 ]

1 голос
/ 31 мая 2020

Проблема здесь в том, что pycco не поддерживает расширения глобусов. Что заставляет pycco *.py работать, так это то, что перед выполнением оболочка фактически преобразует *.py в реальные файлы; а затем передает его в ОС для его запуска.

Когда tox запускает вашу команду, оболочка не задействуется, поэтому все, что вы пишете, передается в ОС, поэтому теперь pycco фактически получает в качестве аргумента *.py отсюда и ошибка.

Вы можете обойти это, либо явно перечислив пути к файлам, либо используя интерпретатор python для выполнения расширения:

python -c 'from glob import glob; import subprocess; subprocess.check_call(["pycco"] + glob("*.py"))'

Поместите указанную выше команду в свой tox команды и другие вещи теперь будут работать, поскольку python теперь оболочка, расширяющая "* .py" до фактического списка файлов.

0 голосов
/ 25 мая 2020

Вы не можете сделать это напрямую, потому что pycco (в настоящее время) не поддерживает глобальные расширения. Вместо этого вы можете создать сценарий оболочки execute_pycco.sh следующим образом:

#!/bin/sh

pycco *.py

Обновить tox.ini следующим образом:

[testenv:pycco]
deps =
    pycco
commands =
    ./execute_pycco.sh

Теперь вы выполните сценарий оболочки в "pycco" среда, созданная tox. Этот метод также позволяет определять более сложные сценарии:

#!/bin/sh

filelist=$( find . -name '*.py' | grep -v ".tox" )
# make a list of all .py files in all subfolders,
# except the .tox/ subfolder

pycco -ip $filelist
# generate literate-style documentation for all
# files in the list
...