setup.py sdist 如何解引用符号链接?

how can setup.py sdist dereference symbolic links?

setup.cfg 部分 data_files 包含带有符号链接的目录。当 运行 python setup.py sdist 时,生成的分布不包含符号链接,它们将被忽略。这里是setup.py的内容,基于pbr:

#!/usr/bin/env python

from setuptools import setup

setup(
    setup_requires=['pbr'],
    pbr=True,
)

取消引用符号链接并改为包含实际文件会很好。分布会更大,因为文件是重复的,但它是完整的。

查看 sdist sources 符号链接似乎总是被忽略:

$ python setup.py sdist
...
'molecule/debops' not a regular file -- skipping
...

是否有解决方法可以说服 sdist 取消对符号链接的引用?

MANIFEST.in graft command is unfortunately not in the python 3 documentation, but can be found in the sources. It calls include_pattern and findall which follows symbolic links。因此,将以下行添加到 MANIFEST.in:

就足够了
graft molecule/

确保 molecule/ 树包含在分发中,并且所有符号 link 都将被遵循。这确实导致重复内容,但结果是完整的。

符号 link 抑制的根本原因是(与 sdist 不同)pbr 遍历 data_files without following symbolic links. It will therefore create a list of paths in the SOURCES.txt file that contain symbolic links. And they will be ignored by sdist 中提到的目录并且从不进入发行版。