列出一个python包中包含的所有文件(相当于'git ls-files')

List all the files included in a python package (equivalent to 'git ls-files')

我在安装 python 软件包时遇到问题,因为我的软件包中很可能包含一些不需要的文件和文件夹。我在 setup.py 文件中使用 MANIFEST.inexclude= 选项排除了许多文件和文件夹。但是,如果不知道我包裹中“跟踪”的所有 files/folders 的列表,似乎几乎不可能纠正这个问题。

在基于 git 的版本控制系统中有一个简洁的系统,它允许从单个文件 .gitignore 中忽略 files/folders 并列出存储库中包含的文件使用git ls-files 命令。

不知python打包系统中是否有与git ls-files等价的命令。如果存在这样的命令,那将是我的福气,可以轻松纠正我的包裹遇到的问题。

如果不是命令,我可以根据 setup.pyMANIFEST.in 中的条件以任何方式列出我的 python 包中包含的所有文件吗?

如果您指的是分发包存档——这取决于存档类型。 wheel(.whl 扩展名)或扩展名为 .zip 的 sdist 是 zip 存档,因此请使用 unzip -l dist-file.zip。对于具有 .tar.gz 扩展名的 sdist 使用 tar -tavf dist-file.tgztar -tzvf dist-file.tar.gz(选项 -a 自动识别存档类型,-z 强制 gzip 压缩) .

要列出已安装的文件 — 请参阅文件 site-packages/<package>-<version>.dist-info/RECORD。找出 site-packages 在哪里 运行 pip show package-name | grep -F Location:

甚至在创建 whl 或 sdist 运行 python setup.py bdist --dry-run 之前列出包中包含的所有文件。该命令列出了将在不创建真实包的情况下打包的文件。例如:

$ git clone https://github.com/mtchavez/python-package-boilerplate.git
Cloning into 'python-package-boilerplate'...
remote: Enumerating objects: 116, done.
remote: Counting objects: 100% (4/4), done.
remote: Compressing objects: 100% (3/3), done.
remote: Total 116 (delta 0), reused 0 (delta 0), pack-reused 112
Receiving objects: 100% (116/116), 14.03 KiB | 388.00 KiB/s, done.
Resolving deltas: 100% (41/41), done.

$ cd python-package-boilerplate/

$ python setup.py bdist -n
running bdist
running bdist_dumb
running build
running build_py
file packagename.py (for module packagename) not found
file packagename.py (for module packagename) not found
installing to build/bdist.linux-x86_64/dumb
running install
running install_lib
warning: install_lib: 'build/lib' does not exist -- no Python modules to install

running install_egg_info
running egg_info
creating py_boilerplate.egg-info
writing py_boilerplate.egg-info/PKG-INFO
writing top-level names to py_boilerplate.egg-info/top_level.txt
writing dependency_links to py_boilerplate.egg-info/dependency_links.txt
writing manifest file 'py_boilerplate.egg-info/SOURCES.txt'
file packagename.py (for module packagename) not found
reading manifest file 'py_boilerplate.egg-info/SOURCES.txt'
writing manifest file 'py_boilerplate.egg-info/SOURCES.txt'
Copying py_boilerplate.egg-info to build/bdist.linux-x86_64/dumb/home/phd/.local/lib/python2.7/site-packages/py_boilerplate-1.0.0-py2.7.egg-info
running install_scripts
creating /home/phd/tmp/python-package-boilerplate/dist
Creating tar archive
removing 'build/bdist.linux-x86_64/dumb' (and everything under it)

PS。所有命令都用于 Unix/Linux 命令行。