我创建并发布了一个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 = {"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文档也太复杂了,我不清楚。
答案 0 :(得分:2)
include_package_data
是setuptools
发行版的一部分,而不是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": []})
答案 1 :(得分:1)
您同时使用MANIFEST.in和package_data,因为您提供了两个很容易彼此矛盾的事实来源,所以许多资料都不鼓励这种用法。
仅使用MANIFEST.in且include_package_data = True
其他来源: https://blog.ionelmc.ro/presentations/packaging/#slide:15
答案 2 :(得分:1)
解决方案是@ 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。谢谢您的回答!