访问Python egg中的配置文件时出现问题

2024-06-08 19:13:48 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个Python项目,其结构如下:

package1
  class.py
  class2.py
  ...
package2
  otherClass.py
  otherClass2.py
  ...
config
  dev_settings.ini
  prod_settings.ini

我写了一个设置.py将其转换为具有相同文件结构的egg的文件。有趣的是,当我从IDE运行Python代码时,它可以很好地访问配置文件;但是当我尝试使用egg从不同的Python脚本运行它时,它似乎找不到egg中的配置文件。如果我把配置文件放到一个与调用Python脚本(在egg外部)相关的目录中,它就可以工作了,但这有点挫败了拥有程序所有功能并且可以从任何地方调用的自包含egg的目标。我可以使用任何类/模块并从egg运行任何函数,只要它们不使用配置文件。。。但是如果它们找到了,卵就找不到它们,所以这些功能就不起作用了。在

任何帮助都将非常感谢!我们对鸡蛋的事还不太熟悉,不知道从哪里开始。在


Tags: 文件项目py功能脚本settingsegg配置文件
2条回答

问题是,配置文件不再是文件了-它们打包在鸡蛋里。在文档中找到答案并不容易,但它确实存在。从setuptools developer's guide

Typically, existing programs manipulate a package's __file__ attribute in order to find the location of data files. However, this manipulation isn't compatible with PEP 302-based import hooks, including importing from zip files and Python Eggs.

要访问它们,您需要遵循资源管理API的instructions。在

在我自己的代码中,我遇到了一个日志配置文件的问题。我像这样成功地使用了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')

Setuptools' discussion of accessing pacakged data files at runtime。如果你想让脚本在一个鸡蛋里工作,你必须得到你的配置文件a different way。另外,为了实现这一点,您可能需要将config目录转换为一个Python包,方法是放入一个空的__init__.py文件。在

相关问题 更多 >