Jsh*_*hee 1 python import python-import
我有:
script1.py in database/table_inserts/ #trying to import below file into
dbcrud.py in database/ #trying to import by above file
Run Code Online (Sandbox Code Playgroud)
在script1.py
我有:
from ..dbcrud import set_db_setting
Run Code Online (Sandbox Code Playgroud)
但这会引发错误:
from ..dbcrud import set_db_setting
SystemError: Parent module '' not loaded, cannot perform relative import
Run Code Online (Sandbox Code Playgroud)
我究竟做错了什么?
编辑:
感谢@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
Run Code Online (Sandbox Code Playgroud)
然后你所要做的script1.py
就是dbcrud.py
像这个例子一样导入你的模块:
# Note here the double dots '..'
from ..dbcrud import you_module
Run Code Online (Sandbox Code Playgroud)
否则,如果您想要其他解决方案,您可以$PYTHONPATH
像这样编辑变量:
dbcrud.py:
class DBCrud:
def __init__(self):
print("I'm DBCrud'")
Run Code Online (Sandbox Code Playgroud)
脚本1.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()
Run Code Online (Sandbox Code Playgroud)
现在,您可以从database/
文件夹或database/table_insers/
文件夹运行测试示例:
~$ pwd
/user/path/database/table_inserts
~$ python3 script1.py
Run Code Online (Sandbox Code Playgroud)
输出:
I'm Script1'
I'm DBCrud'
Run Code Online (Sandbox Code Playgroud)
和:
~$ pwd
/user/path/database
~$ python3 table_inserts/script1.py
Run Code Online (Sandbox Code Playgroud)
输出:
I'm Script1'
I'm DBCrud'
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
7825 次 |
最近记录: |