用于为Python项目生成requirements.txt的工具。
项目描述
pipgar
- 为Python项目生成requirements.txt。
- 处理不同Python版本之间的差异。
- 支持Jupyter笔记本 (
*.ipynb
)。 - 包括从
exec
/eval
/importlib
导入的语句/魔法,docstring的doctest等。
- 通过顶级导入/模块名称搜索发行版(包)。
- 检查要求的最新版本。
注意: Pipenv或其他工具推荐用于改进您的开发流程。
安装
pipgar
可在Python 3.7+上运行。
要使用pip
安装,使用
[sudo] pip install pigar
要使用conda
安装,使用
conda install -c conda-forge pigar
要从GitHub获取最新代码
pip install git+https://github.com/damnever/pigar.git@[main or other branch] --upgrade
使用方法
-
pipgar
可以处理大多数复杂情况(见常见问题解答)。例如,pipgar v1
有不同的py2_requirements.txt
和py3_requirements.txt
用于不同版本的Python。# Generate requirements.txt for current directory. $ pigar generate # Generating requirements.txt for given directory in given file. $ pigar gen -f ../dev-requirements.txt ../
pigar gen --with-referenced-comments
可以列出所有引用了包/分发的文件(对于 Jupyter 笔记本的行号可能有点令人困惑),例如:# project/foo.py: 2,3 # project/bar/baz.py: 2,7,8,9 foobar == 3.3.3
如果 requirements.txt 被覆盖,
pigar
将显示新旧之间的差异,使用--dont-show-differences
来禁用它。注意,
pigar
首先会在本地环境中搜索包/分发,然后它将进一步分析和在 PyPI 上搜索缺失的包/分发。参见: 实验性功能。
-
如果您不知道属于特定分发的导入名称(更普遍地说,
Import Error: xxx
是否让您发疯?),例如bs4
可能来自beautifulsoup4
或MySQLdb
可能来自mysql-python
,尝试搜索它$ pigar search bs4 MySQLdb
-
检查最新版本
# Specify a requirements file. $ pigar check -f ./requirements.txt # Or, you can let pigar searching all *requirements.txt in the current directory # level by itself. $ pigar check
-
更多
提示:
pigar
接受命令的前缀,例如pigar gen
,pigar c
。pigar --help
实验性功能
-
requirement-annotations
某些包可能需要根据您的使用情况安装可选的包/分发。为了使
pigar
更有用,请使用pigar generate --enable-feature requirement-annotations
并结合以下格式的注释import foo # pigar: required-imports=import_name_bar,import_name_baz import foo # pigar: required-packages=package-name-bar,package-name-baz # Extra comments are allowed. foo(features=['bar', 'baz']) # pigar: required-distributions=package-name-bar,package-name-baz
如果您觉得这些注释很烦人,可以将这些注释提取到单独的 Python 文件中,并在需要时删除它,例如 'pigar_annotations.py'。
常见问题解答
pigar
是一个依赖关系管理工具吗?
不是。 我已经多次考虑过这个问题,但要让 pigar
的方式可靠,需要做太多的脏活。
我喜欢 pigar
执行工作的方式,但遗憾的是,pigar
在管理依赖关系方面做得不好,pigar
更像一个帮助旧项目迁移到新开发工作流程的工具。
(1) 为什么 pigar
会显示相同导入名称的多个包/分发?(2) 为什么 pigar
在不同的环境中为相同的导入名称生成不同的包/分发?
pigar
在不同的环境中为相同的导入名称生成不同的包/分发?pigar
无法优雅地处理这些情况,您可能需要手动删除 requirements.txt 中的重复包,或者在 pigar
询问您时选择其中一个。在本地环境中安装所需的包/分发(删除其他包)也应能解决这个问题。
更多
pigar
并不是以如此激烈的方式使用正则表达式。相反,它使用 AST,这是从 exec
/eval
/importlib
的参数、文档字符串的 doctest 等中提取导入名称的更好方法。然而,pigar
无法解决所有棘手的问题,请参阅 常见问题解答。
此外,pigar
可以检测不同 Python 版本之间的差异。例如,您可以从 Python 3.2 的标准库中找到 concurrent.futures
,但在 Python 的更早版本中,您需要安装 futures
来获取 concurrent.futures
,这并非硬编码。
如果您有任何问题或建议,请在GitHub上提交问题。 所有贡献都受到欢迎!
许可证
项目详情
下载文件
下载适合您平台的文件。如果您不确定选择哪个,请了解更多关于安装包的信息。
源分布
构建分布
pigar-2.1.6.tar.gz的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | a524cd7b9aa67efba3a403988e4630676b05831fcbcb7ecaa01377e88abb5e96 |
|
MD5 | 38243d2678e18015ef6f303b148843b5 |
|
BLAKE2b-256 | 79e2f0e651f1523311c4091c6c26a8e7c674b4651de6ecf0c041414c80801797 |
pigar-2.1.6-py3-none-any.whl的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | cf4d9e2f69fd94e3bba714639da9eac21e1691b50a137b9b2eb7eb746516c466 |
|
MD5 | b92adfedbdb0d644919b1b6cacf5c31c |
|
BLAKE2b-256 | 8e51888692a1085c109acdbcdd38634d61c68cef35e9ad39a57cad1f0fa73cf4 |