我编写了一个Python包,其中包含一个bsddb数据库,其中包含一个更耗时的计算的预计算值.为简单起见,我的安装脚本将数据库文件安装在与访问数据库的代码相同的目录中(在Unix上,类似于/usr/lib/python2.5/site-packages/mypackage/).
如何存储数据库文件的最终位置,以便我的代码可以访问它?现在,我正在使用基于__file__访问数据库的模块中的变量的hack :
dbname = os.path.join(os.path.dirname(__file__), "database.dat")
它有效,但看起来......是hackish.有一个更好的方法吗?我想让安装脚本从distutils模块中获取最终安装位置,并将其填入"dbconfig.py"文件,该文件与访问数据库的代码一起安装.
Aar*_*paa 31
尝试使用pkg_resources,它是setuptools的一部分(并且可以在我现在可以访问的所有pythons上使用):
>>> 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'
Run Code Online (Sandbox Code Playgroud)
有关使用pkg_resources获取egg页面和pkg_resources页面上的资源的更多讨论.
另请注意,在可能的情况下,建议使用pkg_resources.resource_stream或pkg_resources.resource_string,因为如果包是egg的一部分,resource_filename会将文件复制到临时目录.
这可能就是做到这一点的方法,而无需诉诸更高级的方法,例如使用 setuptools 将文件安装到它们所属的位置。
请注意,这种方法存在问题,因为在具有真正安全框架(UNIX 等)的操作系统上,运行脚本的用户可能无权访问安装脚本的系统目录中的数据库。
| 归档时间: |
|
| 查看次数: |
17083 次 |
| 最近记录: |