Python setup.py';s sdist、bdist和install在数据文件方面的行为不同

Python setup.py';s sdist、bdist和install在数据文件方面的行为不同,python,setuptools,setup.py,data-files,Python,Setuptools,Setup.py,Data Files,我正试图将网络资产与我正试图打包的网络应用一起分发,但我失败得很惨。我不明白为什么在运行bdist、sdist或install时安装了不同的文件或软件包列表 项目布局 该项目在Arch上使用Python3运行。结果与Py3在Raspbian上的结果相同。 我做了一个非常精简的版本,使事情更简单,我在这里描述 文件布局如下所示: data/index.html MANIFEST.in mylib.py setup.py 文件中的清单是: recursive-include data * s

我正试图将网络资产与我正试图打包的网络应用一起分发,但我失败得很惨。我不明白为什么在运行bdist、sdist或install时安装了不同的文件或软件包列表

项目布局 该项目在Arch上使用Python3运行。结果与Py3在Raspbian上的结果相同。 我做了一个非常精简的版本,使事情更简单,我在这里描述

文件布局如下所示:

data/index.html  
MANIFEST.in
mylib.py
setup.py
文件中的
清单是:

recursive-include data *
setup.py
是:

#!/usr/bin/env python

from setuptools import setup, find_packages

setup(name='mylib',
      version='0.1.2',
      url='http://www.example.org',
      author='Foo',
      packages=find_packages(),
      data_files = [ ('share/mylib', ['data/index.html']) ]
)
我的目标是在
PREFIX/share/mylib/index.html
中安装
index.html

运行setup.py 现在,
bdist
将文件包含在看似正确的位置,而
sdist
install
只需忽略它:

  • b列表
使用bdist,我在生成的tar中有以下文件:

./usr/lib/python3.3/site-packages/mylib-0.1.2-py3.3.egg-info/SOURCES.txt
./usr/lib/python3.3/site-packages/mylib-0.1.2-py3.3.egg-info/top_level.txt
./usr/lib/python3.3/site-packages/mylib-0.1.2-py3.3.egg-info/dependency_links.txt
./usr/lib/python3.3/site-packages/mylib-0.1.2-py3.3.egg-info/PKG-INFO
./usr/share/mylib/index.html
这正是我想要安装的,完美。然而,我真的希望
sdist
install
能够工作,因为我想在PyPI上分发这个东西,并且能够从源代码签出安装

  • sdist
当我解压sdist文件时,一切都正常,数据也包括在内:

...
mylib-0.1.2/data/
mylib-0.1.2/data/index.html
...
但是,如果I
sudo python setup.py install--record=log.txt
位于未被删除的目录中,则日志中列出的唯一文件是
/usr/lib/python3.3/site packages/mylib-0.1.2-py3.3.egg
。任何地方都没有
data/index.html
的痕迹('/usr/local/share','/usr/share')

  • 安装
与sdist相同的问题(我想这是意料之中的)。任何地方('/usr/local/share','/usr/share')都没有
data/index.html
的痕迹

我还尝试添加setup.cfg,如下所示:

[install]
install-data=/usr/local/share/mylib/
install_data=/usr/local/share/mylib/
(我添加了install数据和install_数据,因为docs声明使用后者,而我看到其他项目使用前者)。不走运

后记 现在,我对python及其环境非常陌生,我可能遗漏了一些明显的东西,或者误解了setuptools的工作原理。我一直在反复阅读文档,阅读stackoverflow在data_文件中的问答,但没有取得任何进展

如果有人能给我指出解决这个问题的正确方向,那就太好了。链接到分发资产的简单项目也是一个不错的选择。我就是找不到一个能给我那个“啊啊!”时刻的


感谢阅读。

我不知道这是否有帮助,因为我总是包含与python包相关的数据文件。除了
MANIFFEST.in
之外,您还可以在
setup.py
中输入
package\u数据

setup(name='mylib',
  version='0.1.2',
  url='http://www.example.org',
  author='Foo',
  packages=find_packages(),
  package_data={'package_name': 'package_dir/data/*'}

)

这将把数据放入
站点包/mylib-0.1.2/data

谢谢你的回答@knitti,但我真的希望它们放在数据文件中,使用
zip\u safe=False
可以防止对egg文件进行压缩,并且在使用表单
python setup.py install时可能会在文件系统中显示您的文件