在 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
txt 文件包含在 dist 目录中 zip 的 gimpscm 子目录中的 .py 文件中。但是当我 pip install gimpscm
时,文件根本没有安装。
我是这样发布包的:
python setup.py sdist
twine upload dist/*
在 pypi 网站上,上传的包确实包含 txt 文件,只是不包含在 pip install
。
到目前为止这个过程非常令人沮丧,Whosebug 和其他网站也没有给出明确的答案。我在每种组合中都尝试了 MANIFEST.in 和 setup.py 指令方法。它仍然不起作用。 Python 文档对我来说也太复杂和不清楚了。
您同时使用了 MANIFEST.in 和 package_data,许多来源不鼓励这种使用,因为您提供了两个很容易相互不一致的事实来源。
仅使用 MANIFEST.in 和 include_package_data = True
其他来源:
https://blog.ionelmc.ro/presentations/packaging/#slide:15
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": []})
解决方案是@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。谢谢您的回答!
我创建并发布了一个 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 文件包含在 dist 目录中 zip 的 gimpscm 子目录中的 .py 文件中。但是当我 pip install gimpscm
时,文件根本没有安装。
我是这样发布包的:
python setup.py sdist
twine upload dist/*
在 pypi 网站上,上传的包确实包含 txt 文件,只是不包含在 pip install
。
到目前为止这个过程非常令人沮丧,Whosebug 和其他网站也没有给出明确的答案。我在每种组合中都尝试了 MANIFEST.in 和 setup.py 指令方法。它仍然不起作用。 Python 文档对我来说也太复杂和不清楚了。
您同时使用了 MANIFEST.in 和 package_data,许多来源不鼓励这种使用,因为您提供了两个很容易相互不一致的事实来源。
仅使用 MANIFEST.in 和 include_package_data = True
其他来源: https://blog.ionelmc.ro/presentations/packaging/#slide:15
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": []})
解决方案是@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。谢谢您的回答!