繁体   English   中英

在python包中包含非python文件

[英]Including non-python files in a python package

我创建并发布了一个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

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

我以这种方式发布软件包:

python setup.py sdist
twine upload dist/*

在pypi网站上,上传的软件包中确实包含txt文件,而pip install却没有包含该文件。

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

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": []})

您同时使用MANIFEST.in和package_data,因为您提供了两个很容易彼此矛盾的事实来源,所以许多资料都不利于这种用法。

仅使用MANIFEST.in和include_package_data = True

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

解决方案是@ 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。 谢谢您的回答!

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM