在 python 包中包含非 python 文件

208*_*080 4 python pip manifest package python-3.x

我创建并发布了一个 Python 包,但我无法让它包含文本文件。

这是存储库:https : //github.com/void4/gimpscm

我需要包含的文件是 procdump.txt,位于 gimpscm 目录中。

所以布局是这样的:

setup.py
setup.cfg
MANIFEST.in
gimpscm/
       /__index__.py
       /procdump.txt
       /(other .py files)
Run Code Online (Sandbox Code Playgroud)

我试过:

  • 在 setup.py 中包含 package_data 指令
  • 各种 MANIFEST.in 指令

当前的 setup.py 包括:

  package_data = {"gimpscm": ["gimpscm/procdump.txt"]},
  include_package_data=True,
Run Code Online (Sandbox Code Playgroud)

MANIFEST.in 包含:

recursive-include gimpscm *.txt
Run Code Online (Sandbox Code Playgroud)

txt 文件与 dist 目录中 zip 文件的 gimpscm 子目录中的 .py 文件一样包含在内。但是当我pip install gimpscm,文件根本没有安装。

我以这种方式发布包:

setup.py
setup.cfg
MANIFEST.in
gimpscm/
       /__index__.py
       /procdump.txt
       /(other .py files)
Run Code Online (Sandbox Code Playgroud)

在 pypi 网站上,上传的包确实包含 txt 文件,只是不包含在pip install.

这个过程到目前为止已经非常令人沮丧,Stackoverflow 和其他网站都没有给出明确的答案。我已经尝试了 MANIFEST.in 和 setup.py 指令方法的每种组合。它仍然不起作用。Python 文档对我来说也太复杂和不清楚。

208*_*080 5

解决方案是@m.rp 和@vin 的答案的组合:

而不是from distutils.core import setup 使用

from setuptools import setup
Run Code Online (Sandbox Code Playgroud)

在 setup() 调用中包含以下参数

include_package_data=True,
Run Code Online (Sandbox Code Playgroud)

并且仅使用 MANIFEST.in 来包含文件,其中指定的目录相对于 MANIFEST.in 文件所在的位置。

recursive-include gimpscm *.txt
Run Code Online (Sandbox Code Playgroud)

这是一个多么庞大的 PITA。谢谢您的回答!