如何自动获取Python库setup.py中install_requires的依赖列表?
自动生成Python库setup.py的install_requires并兼容pre-commit的方法
可行工具推荐
pigar
这是目前最靠谱的自动依赖扫描工具,能精准识别项目代码里实际导入的包,还支持直接更新setup.py的install_requires字段,甚至能根据代码里的用法推断合适的版本范围。
使用步骤:- 安装:
pip install pigar - 在项目根目录执行:
pigar update,它会自动扫描所有.py文件,更新setup.py里的依赖列表。 - 如果有不需要纳入生产依赖的包(比如开发工具),可以在项目根目录创建
.pigar_exclude文件,把要排除的包名或路径写进去。
- 安装:
pipreqs
轻量型的依赖扫描工具,适合简单项目。它会生成requirements.txt,你可以把内容直接复制到setup.py的install_requires,或者通过参数指定写入setup.py。
使用步骤:- 安装:
pip install pipreqs - 生成依赖文件:
pipreqs --force .(--force覆盖现有requirements.txt) - 手动将requirements.txt里的内容迁移到setup.py的
install_requires,或者用pipreqs --force --savepath setup.py直接写入(注意此参数需确认版本支持)。
- 安装:
集成pre-commit实现提交时自动检查/更新
把依赖扫描工具加到pre-commit钩子,每次提交代码时自动执行,确保install_requires和实际代码依赖一致。以pigar为例,配置方式如下:
- 在项目根目录创建或修改
.pre-commit-config.yaml,添加以下内容:
repos: - repo: local hooks: - id: pigar-update-deps name: Update install_requires with pigar entry: pigar update language: system pass_filenames: false always_run: true # 可选:只在Python文件变更时触发,取消注释下面一行 # files: \.(py)$
- 安装pre-commit钩子:
pre-commit install
之后每次执行git commit时,工具会自动扫描代码并更新setup.py的依赖。如果依赖有变更,钩子会修改setup.py,你需要重新提交修改后的文件。
注意事项
- 动态导入的依赖(比如用
importlib.import_module加载的包)工具无法自动识别,需要手动补充到install_requires。 - 开发依赖(如pytest、flake8)不要放到
install_requires,应该放在setup.py的extras_require的dev字段里,工具一般会自动排除这类包,但最好通过配置文件确认。 - 首次使用工具后,务必手动检查生成的依赖列表,避免误加无关包或遗漏必要依赖。
内容的提问来源于stack exchange,提问作者Thomas Friesen
相关产品推荐
相关产品推荐

