如何使设置工具遵循符号链接?

Leo*_*ery 7 python distutils setuptools

我正在尝试设置一个用于分发的 python 包。我以前没有这样做过,所以我对最佳实践,甚至如何使事情发挥作用都一无所知,而且我遇到了一个问题。我的项目结构如下所示:

ROIWidgets/
    MANIFEST.in
    setup.py
    setup.cfg
    ROIWidgets/
        __init__.py
    static/
        widgets/
            js -> <symlink to folder containing JavaScript files>
Run Code Online (Sandbox Code Playgroud)

问题在于静态下的 JS 文件。我从distutils. 我将此行包含在MANIFEST.in

recursive-include static *
Run Code Online (Sandbox Code Playgroud)

...这导致 JS 被包含在包中。好的。然后我读到如果我想让我的安装脚本自动安装依赖项,我需要使用setuptools而不是distutils. 所以,我切换了:我setup从而setuptools不是导入distutils。但是现在,当我说 时setup.py sdist,输出中会出现这一行:

warning: no files found matching '*' under directory 'static'
Run Code Online (Sandbox Code Playgroud)

...并且 JS 文件不包含在发行版中。经过与调试器的长时间会话后,我在setuptools/__init__.py. 这里是:

def findall(dir = os.curdir):
    """Find all files under 'dir' and return the list of full filenames
    (relative to 'dir').
    """
    all_files = []
    for base, dirs, files in os.walk(dir):
        if base==os.curdir or base.startswith(os.curdir+os.sep):
            base = base[2:]
        if base:
            files = [os.path.join(base, f) for f in files]
        all_files.extend(filter(os.path.isfile, files))
    return all_files

distutils.filelist.findall = findall    # fix findall bug in distutils.
Run Code Online (Sandbox Code Playgroud)

os.walk默认情况下不遵循符号链接。所以setuptools版本findall没有在我的js目录中查找。distutils findall没有使用os.walk——而是它有自己的目录遍历代码。从更改日志中,似乎存在distutils findall符号链接损坏的问题,此替换旨在解决该问题。使用起来很容易os.walk(dir, followlinks=True),但也许有某种原因为什么这是一个坏主意?

所以我有点卡住了。要么我改变我的项目的结构,我讨厌这样做,或者我用渣土distutilssetuptools内部,前景,这让我更加不开心。

有什么建议?

use*_*ser -1

在您提出问题时,这显然已在存储库中修复(可能为时过早,该修复尚未广泛普及)。

我相信这意味着固定 setuptools 包的相关版本标签是8.0.2. 更新到该版本可以解决该问题。