MANIFEST.in在“ python setup.py install”上被忽略-没有安装数据文件?
问题内容:
这是我精简后的setup.py脚本,其中删除了非代码内容:
#!/usr/bin/env python
from distutils.core import setup
from whyteboard.misc import meta
setup(
name = 'Whyteboard',
version = meta.version,
packages = ['whyteboard', 'whyteboard.gui', 'whyteboard.lib', 'whyteboard.lib.pubsub',
'whyteboard.lib.pubsub.core', 'whyteboard.lib.pubsub.utils', 'whyteboard.misc'],
py_modules = ['whyteboard'],
scripts = ['whyteboard.py'],
)
MANIFEST.in:
include *.txt
include whyteboard-help/*.*
recursive-include locale *.mo
recursive-include images *.png
当我运行“ python setup.py install sdist”时,我得到一个带有“
whyteboard-0.41”根文件夹的不错的.tar.gz,其中包含我的语言环境/ images /和whyteboard-help
/文件夹。这也有我的whyteboard.py脚本,可以从Whyteboard源代码包中启动我的程序。
所以:
whyteboard/
├── locale/
├── images
├── whyteboard-help/
├── whyteboard/
│ ├── __init__.py
│ └── other packages etc
├── whyteboard.py
├── README
├── setup.py
└── CHANGELOG
这反映了我程序的源代码,即所有内容应该是正确的。
但是,当我运行“ python setup.py install”时,没有写入任何数据文件-仅包含“
whyteboard”源程序包,而whyteboard.py放在/usr/local/lib/python2.6/dist-packages/中。
理想情况下,我希望使用与在dist-packages中创建的.tar.gz文件中生成的目录结构相同的目录结构,因为这是我的程序希望查找其资源的方式。
如何获得“安装”以创建此目录结构?据我所知,它似乎无视我的清单文件。
问题答案:
除了Ned的答案(这是核心问题)之外,还有一些注意事项:
Distutils不会在site-packages
(或dist-packages
在Debian /
Ubuntu上)的每个项目子目录中安装Python软件包和模块:site-packages
如您所见,它们直接安装在中。因此,whyteboard- xx
sdist中的包含目录将不会以最终安装的形式存在。
这意味着您应该谨慎地命名您的名称data_files
,以阐明它们属于哪个项目,因为这些文件/目录直接安装在全局site- packages
目录中,而不是在任何包含whyteboard
目录中。
或者你可以反而让你的数据package_data
中的whyteboard
包(这意味着它需要生活里面那个包,即旁__init__.py
),然后这不是一个问题。
最后,同时包含whyteboard.py
模块py_modules
和whyteboard/__init__.py
包并没有多大意义packages
。两者是互斥的,并且如果两者都使用,则whyteboard.py
导入将忽略该模块,而使用相同名称的软件包。
如果whyteboard.py
只是一个脚本,并且不打算导入,则应使用脚本选项,并将其从中删除py_modules
。