这个问题在这里得到了很好的解释:
Setuptools 有许多静默故障模式。其中之一是未能在 sdist 版本中包含所有文件(不完全是失败,您可以使用 RTFM,但默认行为是意外的)。这篇文章将作为这个问题的 google-yourself 答案,直到我们获得新的、更闪亮的、分布式的解决我们所有的问题。
正如评论所指出的,错误(错误设计)实际上在 distutils 中—— setuptools 只是无法修复它(如果您使用的是 svn,实际上情况会好一些)。
当您观察到它时,我可以重现您的问题,即稍微缩短文件名,我有:
$ ls -lR
total 8
-rw-r--r-- 1 aleax eng 0 Oct 24 11:25 __init__.py
-rw-r--r-- 1 aleax eng 0 Oct 24 11:25 modu.py
drwxr-xr-x 4 aleax eng 136 Oct 24 11:25 mysub
-rw-r--r-- 1 aleax eng 323 Oct 24 11:26 setup.py
./mysub:
total 0
-rw-r--r-- 1 aleax eng 0 Oct 24 11:25 __init__.py
-rw-r--r-- 1 aleax eng 0 Oct 24 11:25 deepmod.py
并运行python setup.py sdist
产生(以及警告):
$ ls -lR
total 16
-rw-r--r-- 1 aleax eng 104 Oct 24 11:35 MANIFEST
-rw-r--r-- 2 aleax eng 0 Oct 24 11:25 __init__.py
drwxr-xr-x 3 aleax eng 102 Oct 24 11:35 dist
-rw-r--r-- 2 aleax eng 0 Oct 24 11:25 modu.py
drwxr-xr-x 5 aleax eng 170 Oct 24 11:35 mypack
drwxr-xr-x 4 aleax eng 136 Oct 24 11:25 mysub
-rw-r--r-- 1 aleax eng 323 Oct 24 11:26 setup.py
./dist:
total 8
-rw-r--r-- 1 aleax eng 483 Oct 24 11:35 a-0.1.tar.gz
./mypack:
total 0
-rw-r--r-- 2 aleax eng 0 Oct 24 11:25 __init__.py
-rw-r--r-- 2 aleax eng 0 Oct 24 11:25 modu.py
drwxr-xr-x 4 aleax eng 136 Oct 24 11:35 mysub
./mypack/mysub:
total 0
-rw-r--r-- 2 aleax eng 0 Oct 24 11:25 __init__.py
-rw-r--r-- 2 aleax eng 0 Oct 24 11:25 deepmod.py
./mysub:
total 0
-rw-r--r-- 2 aleax eng 0 Oct 24 11:25 __init__.py
-rw-r--r-- 2 aleax eng 0 Oct 24 11:25 deepmod.py
一种解决方案是按如下方式更改目录布局(从当前的 mypack 目录):
$ mkdir mypack
$ mv __init__.py modu.py mysub/ mypack
$ touch README.txt
所以得到:
$ ls -lR
total 8
-rw-r--r-- 1 aleax eng 0 Oct 24 11:37 README.txt
drwxr-xr-x 5 aleax eng 170 Oct 24 11:37 mypack
-rw-r--r-- 1 aleax eng 323 Oct 24 11:26 setup.py
./mypack:
total 0
-rw-r--r-- 1 aleax eng 0 Oct 24 11:25 __init__.py
-rw-r--r-- 1 aleax eng 0 Oct 24 11:25 modu.py
drwxr-xr-x 4 aleax eng 136 Oct 24 11:25 mysub
./mypack/mysub:
total 0
-rw-r--r-- 1 aleax eng 0 Oct 24 11:25 __init__.py
-rw-r--r-- 1 aleax eng 0 Oct 24 11:25 deepmod.py
(并摆脱其中一个警告,即关于 README 的警告——关于缺少 MANIFEST.in 的警告显然仍然存在;-)。还将 setup.py 的一行更改为:
package_dir={'': '.'},
现在,在 之后python setup.py sdist
,您确实得到了一个不错的 tarball:
$ tar tvf dist/a-0.1.tar.gz
drwxr-xr-x aleax/eng 0 2009-10-24 11:40:05 a-0.1/
drwxr-xr-x aleax/eng 0 2009-10-24 11:40:05 a-0.1/mypack/
-rw-r--r-- aleax/eng 0 2009-10-24 11:25:30 a-0.1/mypack/__init__.py
-rw-r--r-- aleax/eng 0 2009-10-24 11:25:30 a-0.1/mypack/modu.py
drwxr-xr-x aleax/eng 0 2009-10-24 11:40:05 a-0.1/mypack/mysub/
-rw-r--r-- aleax/eng 0 2009-10-24 11:25:30 a-0.1/mypack/mysub/__init__.py
-rw-r--r-- aleax/eng 0 2009-10-24 11:25:30 a-0.1/mypack/mysub/deepmod.py
-rw-r--r-- aleax/eng 156 2009-10-24 11:40:05 a-0.1/PKG-INFO
-rw-r--r-- aleax/eng 0 2009-10-24 11:37:41 a-0.1/README.txt
-rw-r--r-- aleax/eng 322 2009-10-24 11:39:46 a-0.1/setup.py
当然,清单文件仍然在您当前的目录中创建,但我希望这不是问题。