我正在尝试将一个项目与我编写的flake8插件集成为本地插件(例如不是 PyPI 包),如此处所述。该项目使用虚拟环境,既在本地使用,也作为 github 工作流使用。由于 flake8 是从虚拟环境中调用的,因此它找不到该插件,该插件位于项目根目录下的文件夹中。当我手动将插件代码添加到虚拟环境文件夹时,它可以很好地集成,并且 flake8 能够找到并执行它。
该解决方案有点像某种 github pre-commit-config/hook,但我在文档中找不到此用例的任何参考。目前 flake8 在 pre-commit-config 中的配置如下:
repos: - repo: https://github.com/pre-commit/pre-commit-hooks rev: v4.2.0 hooks: - id: debug-statements - repo: https://github.com/PyCQA/flake8 rev: 4.0.1 hooks: - id: flake8 additional_dependencies: ['dlint']
有没有办法在本地/github 工作流中将我的未打包的 flake8 插件与虚拟环境一起使用?
要在本地和 GitHub 工作流中将未打包的 Flake8 插件与虚拟环境一起使用,你可以通过以下方法解决这个问题:
Flake8 支持通过配置文件引用本地插件,这不需要将插件打包到 PyPI,也不需要手动将代码复制到虚拟环境。
Flake8 使用 setuptools 的 entry_points 来注册插件,即使是本地插件也需要一个入口点。
setuptools
entry_points
在项目中添加一个 setup.cfg 或 pyproject.toml 文件(如果没有的话),并定义 Flake8 插件的入口点:
setup.cfg
pyproject.toml
[flake8:local-plugins] extension = MY001 = my_plugin_module:MyPluginClass
MY001
my_plugin_module
MyPluginClass
注意:此文件应位于插件代码所在的项目根目录。
通过 pip install -e . 将项目安装为“可编辑”模式,插件就会被自动注册到 Flake8。
pip install -e .
这样,Flake8 就会找到本地插件,而无需手动将其复制到虚拟环境。
在 GitHub Actions 的工作流配置中,确保插件代码被安装到虚拟环境中。例如:
steps: - uses: actions/checkout@v3 - name: Set up Python uses: actions/setup-python@v4 with: python-version: '3.10' - name: Install dependencies run: | python -m venv .venv source .venv/bin/activate pip install flake8 pip install -e . - name: Run Flake8 run: | source .venv/bin/activate flake8 .
pre-commit
如果你使用的是 pre-commit,可以通过 additional_dependencies 引用本地插件。
additional_dependencies
.pre-commit-config.yaml
repos: - repo: https://github.com/PyCQA/flake8 rev: 4.0.1 hooks: - id: flake8 additional_dependencies: - .
.
pip install .
这种方法无需打包插件到 PyPI,也无需手动将代码复制到虚拟环境。