Я уже некоторое время безуспешно работаю над получением супер-линтера в действии GitHub, чтобы принять мой недавний импорт проекта Python. Я использую py3langid
для определения английского языка в довольно простой реализации шифра Цезаря.
Ошибка линтинга:
PYTHON_PYLINT
2024-07-20 21:05:46 [INFO] Linting PYTHON_PYLINT items...
Error: -20 21:05:47 [ERROR] Found errors when linting PYTHON_PYLINT. Exit code: 1.
2024-07-20 21:05:47 [INFO] Command output for PYTHON_PYLINT:
------
************* Module cipher
caesar_cipher/cipher.py:3:0: E0401: Unable to import 'py3langid.langid' (import-error)
-----------------------------------
Your code has been rated at 8.91/10
------
Верхняя часть cipher.py
"""Caesar Cipher implementation"""
from py3langid.langid import MODEL_FILE, LanguageIdentifier
...
Структура папок (сокращена для краткости)
~/Projects/cryptography/
.git
.github/
workflows/
tests.yml
...
caesar_ciper/
cipher.py
test_cipher.py
...
__init__.py
requirements.txt
тесты.yml
---
name: Test project
on: push
permissions: read-all
jobs:
lint:
runs-on: ubuntu-latest
steps:
- name: Checkout code
uses: actions/checkout@v4
with:
fetch-depth: 0
- name: Lint
uses: super-linter/[email protected]
env:
# To report GitHub Actions status checks
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
test:
needs: lint
runs-on: ubuntu-latest
steps:
- name: Checkout code
uses: actions/checkout@v4
with:
fetch-depth: 0
- name: Install Python
uses: actions/setup-python@v5
with:
python-version: "3.10"
- name: Install dependencies
run: pip install -r requirements.txt
- name: Run tests
run: pytest
Я не использовал pylint
локально до получения этой ошибки. После того, как оно появилось, я побежал
docker run --rm -v $(pwd):/data cytopia/pylint .
и получил следующую ошибку
************* Module .
__init__.py:1:0: F0010: error while code parsing: Unable to load file __init__.py:
[Errno 2] No such file or directory: '__init__.py' (parse-error)
После добавления ~/Projects/cryptography/__init__.py
pylint
локально работал нормально без каких-либо ошибок, но мой удаленный рабочий процесс по-прежнему завершается с той же ошибкой, как указано изначально.
Есть идеи, что я могу делать неправильно? Спасибо
РЕДАКТИРОВАТЬ
Я также попытался создать .pylintrc
на удаленном бегуне действий GitHub, используя этот вопрос SO для заполнения файла.
Ошибка PyLint «Невозможно импортировать» — как установить PYTHONPATH?
установка ~/.pylintrc
на следующее не повлияла на результат супер-линтера
[MASTER]
init-hook='import sys; sys.path.append("./")'
РЕДАКТИРОВАТЬ 2
Попробовал обновить PYTHONPATH
на раннере, чтобы включить рабочий каталог
...
- name: Set PYTHONPATH
run: export PYTHONPATH=${PYTHONPATH}:${pwd}
...
Это также не помогло устранить ошибку линтинга.
РЕДАКТИРОВАТЬ 3
Согласно предложению @Azeem, я попробовал добавить следующее в tests.yml
под lint
...
steps
...
- name: Create .pylintrc # <- this
run: echo "[MASTER]" > ~/.pylintrc && echo "init-hook='import sys; sys.path.append("./")'" >> ~/.pylintrc # <- this
- name: Lint
uses: super-linter/[email protected]
env:
PYTHON_PYLINT_CONFIG_FILE: ~/.pylintrc # <- this
# To report GitHub Actions status checks
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
Это ошибка, которая вернулась
[FATAL] -> PYTHON_PYLINT_LINTER_RULES rules file (/action/lib/.automation/~/.pylintrc) doesn't exist. Terminating...
Есть ли у кого-нибудь еще идеи? Я уже даже не кодирую проект, а просто борюсь с линтером. Возможно, мне придется открыть проблему на GitHub.
Спасибо @Azeem за участие
Прочтите ошибку еще раз и попытайтесь установить местоположение .pylintrc
на /action/lib/.automation/.pylintrc
, но это тоже не удалось.
/home/runner/work/_temp/91c876a5-f511-4156-91ca-5e23ad639603.sh: line 1: /action/lib/.automation/.pylintrc: No such file or directory
Ничего не изменилось, та же ошибка
Попробуйте добавить PYTHON_PYLINT_CONFIG_FILE: .pylintrc
под env
из super-linter
. См. github.com/super-linter/…. По умолчанию для PYTHON_PYLINT_CONFIG_FILE
установлено значение .python-lint
.
Спасибо, Азим, но это тоже не сработало, если только я не добавляю неправильно. См. РЕДАКТИРОВАТЬ 3 в вопросе, спасибо за ваши усилия.
Конечно, без проблем. Если бы вы могли поделиться общедоступным репозиторием как MCVE, было бы очень полезно изучить его подробно и быстро выполнить итерацию.
По общему признанию, это не лучший ответ, поскольку проблема все еще существует, я поработал над ней и перестал использовать super-linter
из-за того, что перепробовал так много вариантов и ничего не добился.
Вместо этого я установил pylint
в свой проект, а также добавил raven-actions/actionlint@v2
в качестве отдельного шага в свой рабочий процесс.
Часть моей CI-автоматизации теперь выглядит так:
---
name: Linting
on: push
permissions: read-all
jobs:
lint:
runs-on: ubuntu-latest
steps:
- name: Checkout code
uses: actions/checkout@v4
with:
fetch-depth: 0
- name: Install Python
uses: ./.github/actions/install-py/
- name: Run pylint
run: pylint ./**/*.py
- name: Run actionlint
uses: raven-actions/actionlint@v2
with:
files: ".github/workflows/*.yml"
Больше никаких ошибок линтинга, а также работает намного быстрее! Я признаю, что это не ответ на первоначальный вопрос, но теперь я могу спать спокойно!
После того, как я столкнулся с множеством проблем с вашей вилкой, я также начал думать о том, как использовать напрямую pylint
вместо super-linter
. Время super-linter
, необходимое для настройки, определенно невелико.
Для тестирования добавьте этап проверки в конце второго задания и посмотрите, сработает ли он.