Отказ от ответственности: после поиска по тоннам очень похожих каналов, которые в конечном итоге оказываются для решения немного другой проблемы, я предполагаю, что должен открыть новый вопрос (хотя я уверен, что ответ существуетгде-то -> укажите, если вы это знаете;)
Проблема: Я использую Python 2, я строю проект с этим деревом:
project
├── __init__.py
├── foo
│ └── __init__.py
│ └── bar
│ └── __init__.py
├── notebooks
│ └── __init__.py
│ └── skript.py
└── test
└── __init__.py
└── foo
└── __init__.py
└── bar
└── __init__.py
└── file.py
Теперь я хочу загрузить test.foo.bar из project/notebooks/skript.py
.Поэтому я делаю в этом сценарии
import sys
sys.path.append('../')
Если я тогда запусту
import test.foo.bar # or: import test.foo
, python сообщит мне
ImportError: No module named foo.bar
(или ImportError: No module named foo
соответственно).К счастью, import test
не выдаёт ошибку, но если я тогда сделаю test.foo
, то выбрасывается AttributeError: 'module' object has no attribute 'foo'
.
Так что мне интересно, что здесь не так и как это исправить?
Редактировать
Также я попытался добавить это к skript.py
import sys
import os
MYDIR = os.path.dirname(os.path.abspath(__file__))
sys.path.append(os.path.join(MYDIR,'../test'))
sys.path.append(os.path.join(MYDIR,'../test/foo'))
sys.path.append(os.path.join(MYDIR,'../test/foo/bar')) #I am not sure this is entirely needed
, как было указано ниже.Тем не менее,
import test.foo.bar.file
или из файла импорта test.foo.bar просто дают
ImportError: No module named foo.bar
То же самое для
sys.path.append('../test/foo/bar')
import test.foo.bar.file
Я до сих пор не понимаю, что происходит не так