我正在尝试将网络 Assets 与我试图打包的网络应用程序一起分发,但我失败了。我不明白为什么我在运行 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
。运行 setup.py
现在,
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 上分发这个东西并且能够从源代码 check out 安装。当我解压 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 的问答,但没有取得任何进展。
如果有人能指出我解决这个问题的正确方向,那就太好了。指向分发 Assets 的简单项目的链接也很好读。我只是找不到一个让我“啊啊!”的人。片刻。
谢谢阅读。
最佳答案
我不知道这是否有帮助,因为我总是将我的数据文件与它们附带的 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
关于python - setup.py 的 sdist、bdist 和 install 在 data_files 方面表现不同,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/21305338/