我有一个Python项目,其结构如下:
package1
class.py
class2.py
...
package2
otherClass.py
otherClass2.py
...
config
dev_settings.ini
prod_settings.ini
我写了一个setup.py文件,将其转换为具有相同文件结构的egg文件。当我使用zip程序检查它时,结构似乎是相同的。有趣的是,当我从我的IDE中运行Python代码时,它可以正常工作并访问配置文件;但是当我尝试使用egg从不同的Python脚本运行它时,它似乎无法在egg中找到配置文件。如果我将配置文件放入相对于调用Python脚本(在egg之外)的目录中,它就可以工作 - 但这有点违背了拥有完整功能且可以从任何地方调用的自包含egg的目的。只要它们不使用配置文件,我可以使用任何类/模块并运行任何函数...但是如果它们使用配置文件,egg就找不到它们,因此函数无法工作。
非常感谢任何帮助!我们在这里对egg还比较新,不知道该从哪里开始。
config = ConfigParser.RawConfigParser() config.read("..\\config\\" + environment + "_settings.ini")
...我应该将其更改为什么? - froadieconfig.read(resource_stream(__name__, "..\\config\\" + environment + "_settings.ini"))
此外,你需要导入资源管理模块:from pkg_resources import resource_stream
- ire_and_cursesconfig.read(pkg_resources.resource_filename(__name__, "..\\config\\" + environment + "_settings.ini"))
(使用resource_filename而不是resource_stream,因为read需要文件名)- 当我运行它时它可以工作但是我仍然会在从egg调用它时遇到错误,虽然这次是一个新错误 -KeyError: 'myPackageName\\..\\config\\dev_settings.ini'
。 - froadiepkg_resources.resource_filename("your_base_package.config", environment + "_settings.ini")
而不是使用__name__
。然后,创建一个config/__init__.py
文件。看看是否有效。(your_base_package
是package1/package2/config的父级目录。如果父目录直接在PYTHONPATH上,只需在资源调用的第一个参数中使用"config")。 - Walter Mundt