跳转到主要内容

用于为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.txtpy3_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 可能来自 beautifulsoup4MySQLdb 可能来自 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 genpigar 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 无法优雅地处理这些情况,您可能需要手动删除 requirements.txt 中的重复包,或者在 pigar 询问您时选择其中一个。在本地环境中安装所需的包/分发(删除其他包)也应能解决这个问题。

相关问题: #32#68#75

为什么 pigar 找不到未明确导入的包/分发?

某些框架可能使用一些魔法自动为用户导入模块,而 pigar 无法处理它,您可能需要手动修复它或使用 实验性功能

相关问题: #33#103

更多

pigar 并不是以如此激烈的方式使用正则表达式。相反,它使用 AST,这是从 exec/eval/importlib 的参数、文档字符串的 doctest 等中提取导入名称的更好方法。然而,pigar 无法解决所有棘手的问题,请参阅 常见问题解答

此外,pigar 可以检测不同 Python 版本之间的差异。例如,您可以从 Python 3.2 的标准库中找到 concurrent.futures,但在 Python 的更早版本中,您需要安装 futures 来获取 concurrent.futures,这并非硬编码。

如果您有任何问题或建议,请在GitHub上提交问题所有贡献都受到欢迎!

许可证

BSD 3条款许可证

项目详情


下载文件

下载适合您平台的文件。如果您不确定选择哪个,请了解更多关于安装包的信息。

源分布

pigar-2.1.6.tar.gz (29.5 MB 查看哈希值)

上传时间

构建分布

pigar-2.1.6-py3-none-any.whl (29.7 MB 查看哈希值)

上传时间 Python 3

支持者