gpt4 book ai didi

python - setup.py 的 sdist、bdist 和 install 在 data_files 方面表现不同

转载 作者:行者123 更新时间:2023-11-28 17:43:28 24 4
gpt4 key购买 nike

我试图将网络 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']) ]
)

我的目标是在 PREFIX/share/mylib/index.html 中安装 index.html

运行setup.py

现在,bdist 将文件包含在看似正确的位置,而 sdistinstall 只是忽略它:

  • 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

这正是我要安装的,完美。但是,我真的希望 sdistinstall 能正常工作,因为我想在 PyPI 上分发这个东西并能够从源 checkout 安装。

  • 分配

当我解压 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 的问答,但没有取得任何进展。

如果有人能指出正确的方向来解决这个问题,那就太好了。指向分发 Assets 的简单项目的链接也将是一个很好的阅读。我只是找不到能给我那种“啊啊!”的感觉的人。时刻。

感谢阅读。

最佳答案

我不知道这是否有帮助,因为我总是将我的数据文件与它们附带的 python 包相关联。除了 MANIFFEST.in 之外,您在 setup.py 中还有一个 package_data 键:

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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com