2013-10-18 41 views
10

当使用Python的setuptools的(python setup.py sdist)创建一个源代码分发,我使用的是MANIFEST.in文件,其中包含行:忽略setuptools MANIFEST.in中的符号链接?

recursive-include mypackage

,因为我想包括mypackage的目录内的一些非模块文件。但是,mypackage目录下也有一些符号链接,它们的目标我不希望包含在我的源代码发行版中。有没有办法在MANIFEST.in内指定“忽略符号链接”?

我知道......我可能不应该有那些符号链接。

+0

也许你可以通过在'setup.py'开头运行一个'MANIFEST_template.in'到'MANIFEST.in'的函数来排除它们?扫描与[本文](http://stackoverflow.com/questions/17889368/if-path-is-symlink-to-otherother-path)信息的符号链接。不过,如果有这样的选择会很好。 – greschd

+2

据我所知,使用'recursive-include mypackage'来避免你的包中包含所有东西。这可以挑选出你真正不想包含在你的发行版中的很多东西。您应该列出特定的文件,如果它们很少且特殊,或者通过扩展或其他文件名称模式包括它们,例如, '递归 - 包含mypackage * .mydataformat'。 – taleinat

+1

如果您知道符号链接,您可以在'MANIFEST.in'中的'recursive-include'之后显式地添加'exclude's - 按顺序对指令进行评估。 – fpbhb

回答

3

Distutils不提供任何特殊的符号链接处理。您可以查看distutils code并查看MANIFEST.in文件的处理正在进行简单的模式匹配,使用os.listdir递归执行,而没有对符号链接进行任何特殊处理。

+3

你可能想要编辑这个答案来说清楚这对我的原始问题意味着“不” - distutils不能被告知忽略符号链接,因为在引擎盖下它不知道它们。 – foobarbecue