在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
做的事情大致相同。