Импорт файлов из другой папки
У меня есть следующая структура папок:
application
├── app
│ └── folder
│ └── file.py
└── app2
└── some_folder
└── some_file.py
Как я могу импортировать функцию из file.py внутри some_file.py? Я пробовал следующий код:
from application.app.folder.file import func_name
Но это не работает.
5 ответ(ов)
В данном случае нет ничего неправильного в следующем импорте:
from application.app.folder.file import func_name
Просто убедитесь, что в папке folder также имеется файл __init__.py. Это позволяет папке рассматриваться как пакет. Я не совсем понимаю, почему в других ответах упоминается PYTHONPATH.
В ситуации, когда модули находятся в параллельных директориях, как в вашем примере:
application/app2/some_folder/some_file.py
application/app2/another_folder/another_file.py
можно сделать один модуль доступным для другого, добавив родительскую директорию в путь поиска модулей. Для этого вы можете использовать следующий код:
import sys
sys.path.append('../')
После добавления ../ в sys.path, Python будет искать модули в родительской директории (application/app2), что позволит вам импортировать необходимые модули из других папок. Убедитесь, что добавление пути происходит до импорта необходимых модулей, чтобы избежать ошибок.
Чтобы импортировать модуль из подпапки в Python, выполните следующие шаги:
Первый шаг: Импортируйте модуль sys в вашем файле name-file.py:
import sys
Второй шаг: Добавьте путь к папке в вашем name-file.py. Это позволит Python знать, где искать ваш пакет:
sys.path.insert(0, '/the/folder/path/name-package/')
Третий шаг: Создайте пустой файл __init__.py в вашей подпапке. Этот файл сигнализирует Python о том, что данная папка является пакетом:
- name-file.py
- name-package/
- __init__.py
- name-module.py
Четвертый шаг: Импортируйте модуль из папки в name-file.py:
from name-package import name-module
Следуя этим шагам, вы сможете успешно импортировать нужный модуль из подпакета.
Проблема заключается в том, что Python ищет файл в неверном каталоге. Чтобы решить эту проблему, попробуйте использовать относительный импорт. Измените строку
from application.app.folder.file import func_name
на:
from .application.app.folder.file import func_name
Добавление точки указывает Python искать папку application в текущем каталоге, а не в каталоге установки Python.
Чтобы вызвать функцию myfunc из файла myfile.py, который находится в папке myfolder, из main.py, используйте следующий синтаксис:
- Убедитесь, что структура папок выглядит следующим образом:
├── main.py
└── myfolder
└── myfile.py
- В
myfile.pyопределите функцию:
def myfunc():
print('hello')
- В
main.pyимпортируйте функциюmyfuncи вызовите её:
from myfolder.myfile import myfunc
myfunc()
При запуске main.py вы должны увидеть вывод: hello.
Как решить проблему "ImportError: Невозможно импортировать имя X" или "AttributeError: ... (вероятно, из-за циклического импорта)"?
Ошибка Python "ImportError: Нет модуля с именем"
Как разгрузить (перезагрузить) модуль Python?
Импорт модуля по относительному пути
Подключение файла из подпапки?