如何使setuptools遵循符号链接?

时间:2014-12-13 14:31:14

标签: python setuptools distutils

我试图设置一个python包进行分发。我之前没有这样做过,所以我对最佳实践,甚至如何让事情有效,我都很朦胧,而且我遇到了问题。我的项目结构如下所示:

ROIWidgets/
    MANIFEST.in
    setup.py
    setup.cfg
    ROIWidgets/
        __init__.py
    static/
        widgets/
            js -> <symlink to folder containing JavaScript files>

问题在于静态的JS文件。我从distutils开始。我在MANIFEST.in中包含了这一行:

recursive-include static *

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

warning: no files found matching '*' under directory 'static'

...并且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.

os.walk默认不遵循符号链接。因此setuptools findalljs版本不在我的distutils目录中。 findall os.walk没有使用distutils - 而是拥有自己的目录行走代码。从更改日志中可以看出,findall os.walk(dir, followlinks=True)在符号链接损坏方面存在问题,此替换符号旨在解决此问题。使用distutils本来很容易,但也许有一些理由说明这是个坏主意?

所以我有点卡住了。要么我改变了我的项目结构,我不喜欢这样做,要么我用setuptools和{{1}}内部结构,这种前景让我更加不快乐。

有什么建议吗?

1 个答案:

答案 0 :(得分:0)

在您提出问题时,这显然是fixed in the repository(修复工作可能为时过早)。

相关问题是this one

我认为这意味着固定setuptools包的相关版本标记为8.0.2