Импорт файлов из другой папки
У меня есть следующая структура папок:
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
.
Импорт модулей из родительской папки
Как импортировать другие файлы Python?
Относительные импорты в Python 3
Как импортировать класс в пределах той же директории или поддиректории?
Импорт модуля по относительному пути