我有一个Python模块,其结构如下:
demo/
├── __init__.py
├── app.py
├── models.py
├── modules.py
现在我要压缩此模块并将其存储到数据库中。
我如何加载这样的结构化包?
虽然我没有加载单个.py
文件并使用其功能的问题,但我不知道如何处理包。在这种情况下,app.py
会从models.py
和modules.py
导入。
使用此方法时,它首先加载app.py
并抛出异常,因为它尚未加载其他2个文件。
import new
code = <the code from the db>
mod = new.module('foo')
exec code in mod.__dict__
sys.modules['foo'] = mod
这是怎么做的?
答案 0 :(得分:2)
我相信你正在寻找的是创建finder和loader类,Doug Hellmann在其中一篇PyMOTW帖子中描述:
http://www.doughellmann.com/PyMOTW/sys/imports.html
虽然Doug的完整帖子可能需要阅读,但是从数据库中存储和加载多文件模块的示例的内容在使用Python数据库“搁置”的部分中:
http://www.doughellmann.com/PyMOTW/sys/imports.html#importing-from-a-shelve