我的应用程序结构如下:
|-- main.py
|-- lib.py
|-- scripts.zip
| |-- run.conf
| |-- script1.py
| |-- more scripts...
| |--
| |-- base.py
main.py导入script1.py,它有一个继承自base.py
的类main.py代码:
module_name = 'script1'
import zipimport
importer = zipimport.zipimporter('scripts.zip')
if module_name not in sys.modules:
importer.load_module(module_name)
script1.py代码:
from . import base
class doesstuff(base.scriptbase):
def __init__:
pass
当main.py尝试使用zipimport导入script1.py时,会发生这种情况:
Traceback (most recent call last):
File "main.py"
importer.load_module(module_name)
File "scripts.zip/script1.py", line 1, in <module>
SystemError: Parent module '' not loaded, cannot perform relative import
首先我认为这是因为zipimport基本上将scripts.zip放在系统路径中,但是当我修改script1.py
时script1.py代码:
import base #zip file should be in the system path as a base
class doesstuff(base.scriptbase):
def __init__:
pass
我明白了:
Traceback (most recent call last):
File "main.py"
importer.load_module(module_name)
File "scripts.zip/script1.py", line 1, in <module>
ImportError: No module named 'base'
显然,它不是系统路径的重要组成部分。 所以我不确定如何让zip文件中的一个脚本导入一个自己的脚本。我已经尝试了以上几种变体,而且几乎所有变体都以Systemerror结束。
我该怎么做?