【问题标题】:List all the files included in a python package (equivalent to 'git ls-files')列出 python 包中包含的所有文件(相当于 'git ls-files')
【发布时间】:2021-12-19 22:19:36
【问题描述】:

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

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

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

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

【问题讨论】:

  • 如果您指的是分发包存档 - 它取决于存档类型。轮子(.whl 扩展名)或带有.zip 扩展名的 sdist 是 zip 存档,因此请使用 unzip -l dist。对于带有.tar.gz 扩展名的sdist,请使用tar -tavf disttar -tzvf dist
  • 列出已安装的文件——查看文件site-packages/<package>-<version>.dist-info/RECORD
  • 我只是想在创建 whl 或 sdist 之前列出包中包含的所有文件。我怀疑很多大数据文件不幸包含在我的包中,所以我不想通过创建 whl 或 sdist 来复制它们。在继续创建包之前,我想简单地获取一个列表并知道预先包含哪些文件。我希望这可以澄清。
  • 否则,对于小文件大小,您提到的创建 dist 会起作用。感谢您的建议。
  • "…在创建 whl 或 sdist 之前列出包中包含的所有文件。" 试试python setup.py bdist -n

标签: python pip setuptools setup.py python-packaging


【解决方案1】:

如果您指的是分发包存档 - 它取决于存档类型。轮子(.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 命令行。

【讨论】:

    猜你喜欢
    • 2020-09-06
    • 2020-08-06
    • 1970-01-01
    • 2020-01-03
    • 1970-01-01
    • 2021-06-19
    • 1970-01-01
    • 2019-07-14
    • 1970-01-01
    相关资源
    最近更新 更多