Python setup.py';s sdist、bdist和install在数据文件方面的行为不同
我正试图将网络资产与我正试图打包的网络应用一起分发,但我失败得很惨。我不明白为什么在运行bdist、sdist或install时安装了不同的文件或软件包列表 项目布局 该项目在Arch上使用Python3运行。结果与Py3在Raspbian上的结果相同。 我做了一个非常精简的版本,使事情更简单,我在这里描述 文件布局如下所示: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
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
...
但是,如果Isudo 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时可能会在文件系统中显示您的文件