6

私のPythonプロジェクトでは、フックpytestとして使用しています。pre-commit一部のテストでは、一時ファイルを作成および削除しますが、実行するとすべて正常に動作しますpytest <test directory>。ただし、トリガーを実行git commitしてpre-commitフックするpytestと、 が原因で一部のテストが失敗しFileNotFoundError: [Errno 2] No such file or directory: '<file name>'ます。これは、多くのファイルが変更されてステージング領域にある場合に発生する印象があります (1 ~ 2 個のファイルでは、この問題は見られません)。これが私のpytestセクションです.pre-commit-config.yaml

  - repo: local
    hooks:
      - id: pytest-check
        name: pytest-check
        entry: bash -c 'pytest'
        language: system

出力は次のようになります。

pytest-check.............................................................Failed
- hook id: pytest-check
- exit code: 1

tests/utils/test_application.py F                                        [ 91%]
tests/utils/test_image_io.py .FFF.........                               [100%]

==================================== ERRORS ====================================
_ ERROR at teardown of test_calling_with_nonexisting_parameter[--non_existing 1337-hm] _

    def teardown_module() -> None:
>       os.remove(OUTPUT_FILE)
E       FileNotFoundError: [Errno 2] No such file or directory: 'output.png'

tests/bdd/step_defs/test_runner_steps.py:98: FileNotFoundError

コンソールから pytest を実行すると、これは発生しません。

pass_filenames: falsealways_run: trueエラーは表示されなくなりました。

  - repo: local
    hooks:
      - id: pytest-check
        name: pytest-check
        entry: pytest
        language: system
        pass_filenames: false
        always_run: true

物事をbashでラップすることに関して、私はまだこれをやっていますpylint:

  - repo: local
    hooks:
      - id: pylint-check
        name: pylint-check
        entry: bash -c 'find . -name "*.py" | xargs pylint'
        language: system
        types: [python]
        pass_filenames: false
        always_run: true

これに対するより良い解決策はありますか?pylint無制限の深さの再帰をサポートしていないため、bash コマンドが必要です。

ありがとう!

ベスト、アレクセイ

4

2 に答える 2