如何在MANIFEST.in文件中转义目录名中的空格?

1 投票
2 回答
1029 浏览
提问于 2025-04-17 04:17

我接手了一段代码,这段代码里的文件夹名字有空格,而且我不能改这个文件夹的名字。假设这个文件夹的名字是“embedded spaces”。

现在我想在一个叫做 MANIFEST.in 的文件里访问这个文件夹里的文件。

我试过以下几种方法:

recursive-include 'embedded spaces' *.dat
recursive-include "embedded spaces" *.dat
recursive-include embedded\ spaces *.dat

但是这些方法都报错,错误信息大概是“警告:在文件夹 'embedded' 下找不到匹配 'spaces' 的文件”。

我有一个变通的方法是:

recursive-include embedded* *.dat

不过我在想,是否有更简单的方法来处理 MANIFEST.in 文件夹名字中的空格。

2 个回答

0

试试这个命令:recursive-include embedded?spaces *.dat

2

看起来不是这样。查看一下 distutils.filelist 的源代码,这个代码负责解析 MANIFEST.in 文件,可以发现它是通过空格来分割每一行,以确定要执行的操作和相关参数。

以下是源代码(使用的是 Python 2.7):

def _parse_template_line(self, line):
    words = line.split()
    action = words[0]

    ...

    if action in ('include', 'exclude',
                  'global-include', 'global-exclude'):
        ...
    elif action in ('recursive-include', 'recursive-exclude'):
        if len(words) < 3:
            raise DistutilsTemplateError, \
                  "'%s' expects <dir> <pattern1> <pattern2> ..." % action

        dir = convert_path(words[1])
        patterns = map(convert_path, words[2:])

    ...

撰写回答