#python-packages #python #dependencies #tool #collect

app un-pack

Unpack 是一个简单、快速且用户友好的 Python 项目打包分析工具

2 个版本

0.1.1 2024年4月11日
0.1.0 2024年4月10日

#744命令行工具

26 每月下载

MITLGPL-3.0-only

490KB
1.5K SLoC

Logos logo

Unpack

CI License: MIT

从您的项目和其他地方解压 Python 包。

Unpack 有几个目标

  • 轻松导航和删除已使用、未使用和未跟踪的 Python 包。
  • 快速识别上述类别中包的磁盘使用情况。
  • 查看各种包及其依赖关系之间的关系。

为了实现这些目标,Unpack

  • 通过遍历 抽象语法树 收集所有项目导入。
  • 依赖规范文件 收集所有声明的依赖项。
  • 将本地环境中的 site-packages 映射到解决依赖关系和它们公开的导入。
  • 识别本地 site-package 依赖项,以避免意外删除其他包正在使用的依赖项。
  • 计算包的大小和总磁盘使用量。

包状态

  • -used 表示包已在本地上安装,其中之一别名在项目中积极使用,并在 pyproject.tomlrequirements.txt 中声明了相应的依赖项。此状态表示完全集成和管理良好的包。

  • -unused 表示包已在本地上安装,并在 pyproject.tomlrequirements.txt 中声明了相应的依赖项,但在项目中未积极使用。 注意: 此包不得是任何积极 -used 包的依赖项,才能被视为未使用。

  • -untracked 表示包已安装,其中之一别名在项目中积极使用,但未在 pyproject.tomlrequirements.txt 中声明。这突出了那些隐式使用但未正式声明的包,可能导致依赖关系管理和部署中的不一致或问题。

用法

❯ un-pack

 📦 Unused Packages

 package      | version      | size     
--------------+--------------+----------
 scikit-learn | ^1.4.1.post1 | 33.2 MiB 
 pydantic     | ^1.9.0       | 7.2 MiB  
 keras        | ^3.0.5       | 3.9 MiB  

 💽 Total disk space: 44.3 MiB

 Note: There might be false-positives.
       For example, Unpack cannot detect usage of packages that are not imported under `[tool.poetry.*]`.
       Similarly, it can only detect declared packages in requirements.txt or pyproject.toml.

安装

在 macOS 上

您可以使用 Homebrew 安装 unpack

brew tap bnkc/tap
brew install unpack

… 或者使用 MacPorts

sudo port install [COMING SOON]

在 crates.io 上

cargo install un-pack --locked

或者,您可以使用以下方法直接从仓库安装 unpack

git clone https://github.com/bnkc/unpack
cargo install --path ./unpack

[!警告] 在某些情况下,使用 Unpack 可能会产生误报。将 site-packages 映射到相应的依赖/导入并不总是 1:1 的关系。例如:scikit-learn 被导入为 sklearn。许多决策都是基于 Python 软件包元数据 做出的。

命令行选项

这是 un-pack -h 的输出。要查看完整的命令行选项,请使用 un-pack --help,它还包括更详细的帮助文本。

Usage: un-pack [OPTIONS]

Options:
  -b, --base-directory <BASE_DIRECTORY>
          The path to the directory to search for Python files. [default: .]
  -s, --package-status <STATUS>
          Select the packages status to search for [default: unused] [possible values: used,
          unused, untracked]
  -i, --ignore-hidden
          Ignore hidden files and directories.
  -d, --max-depth <DEPTH>
          Set maximum search depth (default: none)
  -o, --output <OUTPUT>
          The output format to use allows for the selection of the output format for the results
          of the unused packages search. The default output format is `human`. The `json` format
          is also available [default: human] [possible values: human, json]
  -t, --dep-type <DEP_TYPE>
          Select the depencency specification file of choice if more than one exists. By default,
          `pyproject.toml` is selected [default: poetry] [possible values: pip, poetry]
  -h, --help
          Print help (see more with '--help')
  -V, --version
          Print version

谢谢

Unpack 是一项充满爱心的劳动。有很多可以改进的地方,但如果您觉得这个项目很有用,请给我发消息!

如果您想为 Unpack 做出贡献,请打开一个问题/PR ❤️

依赖项

~20–34MB
~510K SLoC