Ошибка импорта модуля для PYTHON_PYLINT при использовании super-linter/[email protected]

Я уже некоторое время безуспешно работаю над получением супер-линтера в действии 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__.pypylint локально работал нормально без каких-либо ошибок, но мой удаленный рабочий процесс по-прежнему завершается с той же ошибкой, как указано изначально.

Есть идеи, что я могу делать неправильно? Спасибо

РЕДАКТИРОВАТЬ

Я также попытался создать .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

Для тестирования добавьте этап проверки в конце второго задания и посмотрите, сработает ли он.

Azeem 21.07.2024 08:24

Ничего не изменилось, та же ошибка

PumpkinBreath 21.07.2024 16:24

Попробуйте добавить PYTHON_PYLINT_CONFIG_FILE: .pylintrc под env из super-linter. См. github.com/super-linter/…. По умолчанию для PYTHON_PYLINT_CONFIG_FILE установлено значение .python-lint.

Azeem 23.07.2024 09:15

Спасибо, Азим, но это тоже не сработало, если только я не добавляю неправильно. См. РЕДАКТИРОВАТЬ 3 в вопросе, спасибо за ваши усилия.

PumpkinBreath 23.07.2024 12:13

Конечно, без проблем. Если бы вы могли поделиться общедоступным репозиторием как MCVE, было бы очень полезно изучить его подробно и быстро выполнить итерацию.

Azeem 23.07.2024 13:46
github.com/sedexdev/cryptography — большое спасибо :)
PumpkinBreath 23.07.2024 14:01
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
0
6
160
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

По общему признанию, это не лучший ответ, поскольку проблема все еще существует, я поработал над ней и перестал использовать 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, необходимое для настройки, определенно невелико.

Azeem 25.07.2024 09:45

Другие вопросы по теме