1) Убедитесь, что у вас есть пустой __init__.py
файл в subdir
.
2) Используйте полный путь; как то так:
import os
import sys
sys.path.append(os.path.join(os.path.dirname(__file__), 'subdir'))
Изменить: предоставление дополнительной информации, чтобы ответить на вопросы, заданные в комментарии.
Как показывает Ник Джонсон , вы можете поместить эти три строки кода в файл с именем fix_path.py
. Затем в файле main.py
сделайте это import fix_path
перед всеми другими операциями импорта. Ссылка на проверенное приложение, использующее эту технику .
И, да, файл __init__.py
необходим; согласно документации :
При импорте пакета Python
просматривает каталоги на
sys.path ищет пакет
подкаталог.
Файлы __init__.py
необходимы для
заставить Python обращаться с каталогами как
содержащие пакеты; это сделано для
предотвратить каталоги с общим
имя, например строка, из
непреднамеренно скрывая действительные модули
которые происходят позже при поиске модуля
дорожка. В простейшем случае
__init__.py
может быть просто пустым файлом, но он также может выполнять инициализацию
код для пакета или установить
__all__
переменная, описанная позже.