这是我精简后的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

这反射(reflect)了我程序的源代码,即所有内容应该是正确的。

但是,当我运行“python setup.py install”时,没有写入任何数据文件-仅包含“whyteboard”源程序包,而whyteboard.py放在/usr/local/lib/python2.6/dist-packages/中。

理想情况下,我希望使用与在dist-packages中创建的.tar.gz文件中生成的目录结构相同的目录结构,因为这是我的程序希望查找其资源的方式。

如何获得“安装”以创建此目录结构?据我所知,它似乎无视我的 list 文件。

最佳答案

除了Ned的答案(这是核心问题)之外,还有一些注意事项:

Distutils不在site-packages(或Debian/Ubuntu上的dist-packages)内的每个项目子目录中安装Python软件包和模块:如您所见,它们直接安装在site-packages中。因此,您的sdist中包含的whyteboard-xx目录将不会以最终安装的形式存在。

这意味着您应谨慎使用自己的data_files命名,以阐明它们所属的项目,因为这些文件/目录直接安装在全局site-packages目录中,而不是安装在任何包含whyteboard的目录中。

或者,您也可以将数据作为package_data软件包的whyteboard(这意味着它需要存在于该软件包内,即__init__.py旁边),然后就不成问题了。

最后,在whyteboard.py中同时包含py_modules模块和whyteboard/__init__.py中同时包含packages包并没有多大意义。两者是互斥的,如果两者兼而有之,导入将忽略whyteboard.py模块,而使用同名的软件包。

如果whyteboard.py只是一个脚本,并且不打算导入,则应使用scripts选项,并将其从py_modules中删除。

关于python - MANIFEST.in在 “python setup.py install”上被忽略-没有安装数据文件吗?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/3596979/

10-11 19:31