我有一个Python项目,具有以下结构:
package1
class.py
class2.py
...
package2
otherClass.py
otherClass2.py
...
config
dev_settings.ini
prod_settings.ini
Run Code Online (Sandbox Code Playgroud)
我写了一个setup.py文件,将其转换为具有相同文件结构的egg.(当我使用zip程序检查它时,结构看起来完全相同.)有趣的是,当我从IDE运行Python代码时,它工作正常,可以访问配置文件; 但是当我尝试使用egg从不同的Python脚本运行它时,它似乎无法在egg中找到配置文件.如果我将配置文件放入相对于调用的目录中Python脚本(鸡蛋的外部),它的工作原理 - 但这种方式使得拥有一个自包含的鸡蛋的目的失败了,鸡蛋具有程序的所有功能,可以从任何地方调用.我可以使用任何类/模块并运行egg中的任何函数,只要它们不使用配置文件...但如果它们这样做,则鸡蛋找不到它们,因此函数不起作用.
任何帮助将非常感激!我们对这里的鸡蛋有点新意,并不知道从哪里开始.
ire*_*ses 12
问题是,配置文件不再是文件了 - 它们被打包在鸡蛋中.在文档中找到答案并不容易,但它就在那里.从setuptools开发人员指南:
通常,现有程序操纵包的
__file__属性以便找到数据文件的位置.但是,此操作与基于PEP 302的导入挂钩不兼容,包括从zip文件和Python Eggs导入.
要访问它们,您需要按照Resource Management API 的说明进行操作.
在我自己的代码中,我遇到了日志配置文件的这个问题.我成功地使用了这样的API:
from pkg_resources import resource_stream
_log_config_file = 'logging.conf'
_log_config_location = resource_stream(__name__, _log_config_file)
logging.config.fileConfig(_log_config_location)
_log = logging.getLogger('package.module')
Run Code Online (Sandbox Code Playgroud)