This question already has answers here:
How to read a (static) file from inside a Python package?

(7个答案)


4个月前关闭。




我已经编写了一个Python程序包,其中包含一个bsddb数据库,该数据库包含用于更耗时的计算之一的预先计算的值。为简单起见,我的安装脚本将数据库文件安装在与访问数据库的代码相同的目录中(在Unix上,类似于/usr/lib/python2.5/site-packages/mypackage/)。

如何存储数据库文件的最终位置,以便我的代码可以访问它?现在,我正在使用基于访问数据库的模块中__file__变量的黑客:

dbname = os.path.join(os.path.dirname(__ file__),“database.dat”)

它可以工作,但似乎...有点黑。有一个更好的方法吗?我想让安装脚本从distutils模块中获取最终安装位置,并将其填充到一个“dbconfig.py”文件中,该文件与访问数据库的代码一起安装。

最佳答案

尝试使用pkg_resources,它是setuptools的一部分(并且在我现在可以访问的所有python上都可用):

>>> import pkg_resources
>>> pkg_resources.resource_filename(__name__, "foo.config")
'foo.config'
>>> pkg_resources.resource_filename('tempfile', "foo.config")
'/usr/lib/python2.4/foo.config'

关于使用pkg_resources在eggs页面和pkg_resources页面上获取资源的更多讨论。

还要注意,在可能的情况下,建议使用pkg_resources.resource_stream或pkg_resources.resource_string,因为如果包是鸡蛋的一部分,则resource_filename会将文件复制到一个临时目录中。

关于python - 在Python模块发行版中查找文件,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/39104/

10-12 17:03
查看更多