我正在尝试分发网络资产以及我正在尝试打包的网络应用,但我失败了。我不明白为什么在运行bdist,sdist或install时我安装了不同的文件列表或包。
该项目在Arch上使用python 3运行。结果与Raspbian上的Py3相同。 我做了一个非常精简的版本,以简化操作,我在这里描述。
文件布局如下:
data/index.html
MANIFEST.in
mylib.py
setup.py
MANIFEST.in
文件是:
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']) ]
)
我的目标是在index.html
中安装PREFIX/share/mylib/index.html
。
现在,bdist
将文件包含在看似正确的位置,而sdist
和install
只是忽略它:
使用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文件时,一切似乎都没问题并包含数据:
...
mylib-0.1.2/data/
mylib-0.1.2/data/index.html
...
但是,如果我在解除对象的目录中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相同的问题(我想这是预期的)。在任何地方都没有data/index.html
的痕迹('/ usr / local / share','/ usr / share')。
我还试图像这样添加一个setup.cfg:
[install]
install-data=/usr/local/share/mylib/
install_data=/usr/local/share/mylib/
(我已经添加了install-data和install_data,因为docs表示使用后者,而我看到其他项目使用前者)。没有运气。
现在,我对python及其环境都很陌生,我可能会遗漏一些明显或误解setuptools如何工作的东西。我一直在阅读文档,在data_files中详细阅读stackoverflow的Q& A,但没有取得任何进展。
如果有人能指出我正确的方向来解决这个问题,那就太好了。链接到分发资产的简单项目也是一个很好的阅读。我找不到一个给我那个“啊啊!”时刻。
感谢阅读。
答案 0 :(得分:2)
我不知道这是否有帮助,因为我总是包含我的数据文件相对于他们使用的python包。除了MANIFFEST.in
之外,package_data
还有setup.py
个密钥:
setup(name='mylib',
version='0.1.2',
url='http://www.example.org',
author='Foo',
packages=find_packages(),
package_data={'package_name': 'package_dir/data/*'}
)
这会将数据放到site-packages/mylib-0.1.2/data