如何在Python中分发/访问数据文件?
我正在编写一个Django应用程序,它使用pip&virtualenv来管理其开发环境 其中一个依赖项随附了许多数据文件,这些文件是其“后端”,并在其setup.py中配置为如何在Python中分发/访问数据文件?,python,setuptools,distutils,egg,Python,Setuptools,Distutils,Egg,我正在编写一个Django应用程序,它使用pip&virtualenv来管理其开发环境 其中一个依赖项随附了许多数据文件,这些文件是其“后端”,并在其setup.py中配置为data\u files=$FOO(而不是package\u data) 当pkgme查找其后端时,它会查找os.path.join(sys.prefix,“share”,“pkgme”,“backends”)。这在pkgme正常安装时非常有效,并且似乎与匹配,但在pkgme作为egg安装时不起作用 在那里,数据文件安装在$
data\u files=$FOO
(而不是package\u data
)
当pkgme查找其后端时,它会查找os.path.join(sys.prefix,“share”,“pkgme”,“backends”)。这在pkgme正常安装时非常有效,并且似乎与匹配,但在pkgme作为egg安装时不起作用
在那里,数据文件安装在$VIRTUAL_ENV/lib/python2.7/site packages/pkgme-0.1-py2.7.egg/share
下,而不是预期的$VIRTUAL_ENV/share
下
这给我留下了两个问题:
os.path.join
以外的其他方法来查找数据文件,而不管我们是使用egg安装还是传统的系统安装?如果是,什么- 使用
而不是包数据
数据文件
- 更改pkgme以查找与
相关的后端,而不是pkgme.\uuu文件\uuu
sys.prefix
- 您当前的计划基本上是正确的,或者至少是可行的选择
当setuptools创建一个egg时,它会检查egg中的代码是否使用了
\uuuuu file\uuuu
,如果是,它会将egg标记为无法以压缩形式安装。这样,当通过easy_install安装egg时,它将被提取到.egg/
目录,而不是留在.egg
文件中
如果您希望支持压缩/插入式安装(即,只将鸡蛋转储到目录中而不“安装”它),那么您应该使用
pkg\u resources.resource\u filename()
API,而不是\uuu file\uu
,但是,您的软件包将依赖于setuptools或distribute,以使该API可用。我最后执行了以下操作:
- 将pkgme更改为使用
查找自己包含的后端pkg\u resources.resource\u filename()
- 添加了一个入口点,任何用Python编写的后端都可以使用它来发布自己的后端脚本的位置
- 对任何不想使用Python的后端保留基于
的检查sys.prefix
差异可在此处找到:谢谢PJE。很高兴了解
\u文件\u
检查。我用一个与我在这个问题中建议的方法类似的方法,但是附加的使用入口点来处理一些后端。考虑在StupU.Py中设置<代码> ZIPHAuth< <代码>为false,这样它就不会生成.EAG文件。