从模块源复制模板文件

时间:2013-09-21 00:23:24

标签: python

我正在编写一个将作为python模块部署的应用程序。我的问题是,使用它涉及到您正在使用该应用程序的文件夹中的一个非常复杂的配置文件。我正在编写一个例程来检查文件是否存在于当前文件夹中,但是我无法复制默认配置文件。

基本上,我希望能够复制位于

中的文件
/usr/lib/python2-7/dist-packages/myapp/default.ini

到当前文件夹。如何在win,osx和nix系统上访问此文件的路径?

感谢

2 个答案:

答案 0 :(得分:1)

假设您正在使用setuptools(或distribute ...但如果是这种情况,则应更新为setuptools),documentation会解释此问题。 (请务必阅读以下两节。)

首先,正常的setuptools安装会将您的文件放在/ usr / local / share之类的某个位置,而不是放在包中。

你可以覆盖它,但如果这样做,这意味着它们可能最终位于myapp.egg文件或site-packages.zip中,甚至内置于.exe中。在任何一种情况下,您都无法通过路径访问它们。

解决所有这些问题的简单方法是使用pkg_resources。然后,您的代码不必知道有关鸡蛋或zipfiles等的任何信息,您只需按名称打开资源。

当然这意味着你不能只shutil.copy(datapath, './default.ini');你必须做with open('./default.ini', 'w') as f: f.write(datacontents)。但这是唯一真正增加的复杂性。

答案 1 :(得分:0)

在Python模块中,__file__变量保存该模块文件的完整路径。因此,在myapp.something模块中(因此,.../myapp/something.py),您可以写:

import os
os.path.abspath(os.path.join(__file__, '..', 'default.ini'))