python - 如何使设置工具遵循符号链接(symbolic link)?

标签 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。所以,我切换了:我从 setuptools 而不是 distutils 导入 setup。但是现在,当我说 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 默认情况下不遵循符号链接(symbolic link)。所以 findallsetuptools 版本没有在我的 js 目录中查找。 distutils findall 没有使用 os.walk -- 相反它有自己的目录遍历代码。从更改日志来看,distutils findall 似乎存在符号链接(symbolic link)损坏的问题,此替换旨在解决这个问题。使用 os.walk(dir, followlinks=True) 本来就足够简单了,但也许有一些原因导致这是个坏主意?

所以我有点卡住了。要么我改变我的项目结构,这是我不愿意做的,要么我搞砸了 distutilssetuptools 的内部结构,这让我更不高兴。

有什么建议吗?

最佳答案

在您提出问题时,这显然已在存储库中得到修复(修复可能还为时过早,无法广泛传播)。

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

关于python - 如何使设置工具遵循符号链接(symbolic link)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27459888/

相关文章:

python - 打包 Python 库

python - mysql:通过应用 python 函数更新数百万条记录

python - 用 Python Matplotlib 结合图片和绘图

python - 调用 setup.py install 时如何将 --debug 传递给 build_ext?

c# - 在设置项目上下文中,选项 "Localized Resourses from <project name>"和 "Content files from <project name>"是什么意思?

python - 仅在 setup.py 中可能时编译可选的 cython 扩展

python - 在 PyPy 下使用 __slots__

python - 在 Atom 中使用 anaconda 环境

python - 导入错误 : No module named extern;

python - Cython 编译将文本附加到文件名,如何摆脱它?