在python构建和安装中包含数据文件
我一直在摆弄在python构建和安装中包含数据文件,python,manifest,setup.py,Python,Manifest,Setup.py,我一直在摆弄清单。在文件和设置参数package_data和数据文件(都是distutils和setuptools)中花了好几个小时,我不知道在构建和安装python包时如何包含数据文件。当我运行python setup.py sdist时,我设法获得了一些结果,但不是使用python setup.py安装--user而不是使用pip安装--用户 让我们考虑以下简单的包结构: mypackage/ mymodule/ __init__.py gui.py
清单。在
文件和设置
参数package_data
和数据文件
(都是distutils
和setuptools
)中花了好几个小时,我不知道在构建和安装python包时如何包含数据文件。当我运行python setup.py sdist
时,我设法获得了一些结果,但不是使用python setup.py安装--user
而不是使用pip安装--用户
让我们考虑以下简单的包结构:
mypackage/
mymodule/
__init__.py
gui.py
data/
icons/
icon1.png
MANIFEST.in
setup.py
我应该在setup.py
和MANIFEST.in
中放入什么内容才能在构建和安装目录中复制data/icons/icon1.png
我更喜欢选择加入解决方案(声明必须包含的所有文件)
编辑:
事实证明,当我使用
python setup.py安装--user
,使用setup()中的data\u文件
参数时,我可以使它工作。问题在于pip安装--用户
,这是安装我的软件的首选方式。我觉得这很奇怪,我一直认为pip-install
与python-setup.py-install
做的事情大致相同 这可能是的副本。基本上,MANIFEST.in应用于构建sdists或bdists,而setuptools的include_package_data
或类似指令仅适用于bdists。如果要同时作为两者分发,则可以同时使用这两种解决方案。请注意,data\u files
是完全不同的,用于在安装时将数据文件从软件包分发到目标系统上(需要从sdist安装,而不是从控制盘)。谢谢,但分发不是问题。问题在于安装。我在这里找到了一些线索:有几个例子:但我不敢相信安装图标是一个如此复杂的问题。另一个肮脏的修复方法是将我的数据文件夹声明为子包,并在每个目录中添加空的init.py,但这非常肮脏。我在安装过程中从未遇到过问题,只要sdist中包含所有内容。您是否检查了egg信息以确保您的所有文件都已包含在内?此外,在重建之前完全清除任何egg信息并构建目录也很有用。有时,它们的存在会打乱新文件的包含。事实证明,当我使用python setup.py install--user
时,我可以让它正常工作。问题在于pip安装--用户
,这是安装我的软件的首选方式。我觉得这很奇怪,我一直认为pip-install
与python-setup.py-install
做的事情大致相同。这可能是。基本上,MANIFEST.in应用于构建sdists或bdists,而setuptools的include_package_data
或类似指令仅适用于bdists。如果要同时作为两者分发,则可以同时使用这两种解决方案。请注意,data\u files
是完全不同的,用于在安装时将数据文件从软件包分发到目标系统上(需要从sdist安装,而不是从控制盘)。谢谢,但分发不是问题。问题在于安装。我在这里找到了一些线索:有几个例子:但我不敢相信安装图标是一个如此复杂的问题。另一个肮脏的修复方法是将我的数据文件夹声明为子包,并在每个目录中添加空的init.py,但这非常肮脏。我在安装过程中从未遇到过问题,只要sdist中包含所有内容。您是否检查了egg信息以确保您的所有文件都已包含在内?此外,在重建之前完全清除任何egg信息并构建目录也很有用。有时,它们的存在会打乱新文件的包含。事实证明,当我使用python setup.py install--user
时,我可以让它正常工作。问题在于pip安装--用户
,这是安装我的软件的首选方式。我觉得这很奇怪,我一直认为pip-install
与python-setup.py-install
做的事情大致相同。