我有:
script1.py in database/table_inserts/ #trying to import below file into
dbcrud.py in database/ #trying to import by above file
在script1.py
我有:
from ..dbcrud import set_db_setting
但这会引发错误:
from ..dbcrud import set_db_setting
SystemError: Parent module '' not loaded, cannot perform relative import
我做错了什么?
答案 0 :(得分:2)
修改强>
感谢@Mad Physicist
条评论。
解决问题最简单,最简单的方法是在__init__.py
文件夹中添加一个空database/
文件,在__init__.py
文件夹中添加另一个空database/table_inserts/
文件,以便被认可为一揽子计划。
请参阅此层次结构示例:
database/
├── dbcrud.py
├── __init__.py
└── table_inserts
├── __init__.py
└── script1.py
1 directory, 4 files
然后您在script1.py
所要做的就是从dbcrud.py
导入您的模块,如下例所示:
# Note here the double dots '..'
from ..dbcrud import you_module
否则,如果您想要其他解决方案,可以像这样编辑$PYTHONPATH
变量:
<强> dbcrud.py:强>
class DBCrud:
def __init__(self):
print("I'm DBCrud'")
<强> script1.py 强>
# Add the parent directory to your module
# by using this kind of hack
import os, sys
sys.path.insert(1, os.path.join(sys.path[0], '..'))
# Then import your module
from dbcrud import DBCrud
class Script1:
def __init__(self):
print("I'm Script1'")
DBCrud.__init__(self)
# test
if __name__ == '__main__':
app = Script1()
现在,您可以从database/
文件夹或database/table_insers/
文件夹运行测试示例:
~$ pwd
/user/path/database/table_inserts
~$ python3 script1.py
输出:
I'm Script1'
I'm DBCrud'
和
~$ pwd
/user/path/database
~$ python3 table_inserts/script1.py
输出:
I'm Script1'
I'm DBCrud'