【发布时间】:2014-01-23 10:23:51
【问题描述】:
我正在尝试将 Web 资产与我尝试打包的 Web 应用程序一起分发,但我失败了。我不明白为什么在运行 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']) ]
)
我的目标是在PREFIX/share/mylib/index.html 中安装index.html。
运行 setup.py
>现在,bdist 将文件包含在看似正确的位置,而 sdist 和 install 则忽略它:
- bdist
使用 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
...
但是,如果我在解压缩的目录中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 ,因为文档状态使用后者,而我看到其他项目使用前者)。没有运气。
结语
现在,我对 python 和它的环境非常陌生,我可能遗漏了一些明显的东西或误解了 setuptools 的工作原理。我一直在来回阅读文档,在 data_files 中详细阅读了 stackoverflow 的 Q&A,但没有取得任何进展。
如果有人能指出我解决这个问题的正确方向,那就太好了。一个简单的项目分发资产的链接也将是一个很好的阅读。我只是找不到一个给我“啊啊!”的声音。时刻。
感谢阅读。
【问题讨论】:
-
使用
zip_safe=False可以防止egg 文件被压缩,并且在使用python setup.py install形式时可能会在文件系统中泄露您的文件
标签: python setuptools setup.py data-files