【问题标题】:Including non-python files in a python package在 python 包中包含非 python 文件
【发布时间】:2019-11-03 09:46:31
【问题描述】:

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

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

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

所以布局是这样的:

setup.py
setup.cfg
MANIFEST.in
gimpscm/
       /__index__.py
       /procdump.txt
       /(other .py files)

我试过了:

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

当前的 setup.py 包括:

  package_data = {"gimpscm": ["gimpscm/procdump.txt"]},
  include_package_data=True,

并且 MANIFEST.in 包含:

recursive-include gimpscm *.txt

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

我是这样发布包的:

python setup.py sdist
twine upload dist/*

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

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

【问题讨论】:

标签: python python-3.x pip package manifest


【解决方案1】:

您同时使用了 MANIFEST.in 和 package_data,许多来源不鼓励这种使用,因为您提供了两个很容易相互不一致的事实来源。

仅使用 MANIFEST.in 和 include_package_data = True

其他来源: https://blog.ionelmc.ro/presentations/packaging/#slide:15

【讨论】:

【解决方案2】:

include_package_datasetuptools 发行版的一部分,而不是 distutils 尝试如下操作

  from setuptools import setup, find_packages

  setup(name="",
        version="0.1.0",
        packages=find_packages(),
        include_package_data=True,
        setup_requires=["pytest-runner"],
        tests_require=["pytest",
                       "mock"],
        test_suite="pytest",
        install_requires=[],
        entry_points={"console_scripts": []})

【讨论】:

    【解决方案3】:

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

    而不是from distutils.core import setup 使用

    from setuptools import setup
    

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

    include_package_data=True,
    

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

    recursive-include gimpscm *.txt
    

    这是多么巨大的 PITA。谢谢您的回答!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2010-12-09
      • 2016-08-30
      • 1970-01-01
      • 1970-01-01
      • 2019-10-19
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多