2013-10-18 114 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