Edit:
Благодаря @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'
У вас есть '__init __ py' в каталоге базы данных.? Если это так, я думаю, что вы можете сделать «из базы данных import dbcrud». – 2ps
Нет, у меня его нет, что он должен содержать? – Jshee
Я сделал пустую __init__.py в базе данных /, но это ничего не меняет – Jshee