Подключение и использование файлов в Python 3

Раздел: Основы Python -> Импорт модулей

Основной способ: импорт модуля из текущей директории

Чтобы импортировать файл, который находится в той же папке, что и основной скрипт, достаточно использовать ключевое слово import и имя файла без расширения .py. Например, если имеется файл my_module.py с функцией greet(), то в основном скрипте пишется import my_module и затем my_module.greet(). Этот способ является самым простым и эффективным для небольших проектов, где все файлы расположены рядом.

# my_module.py
def greet(name):
    return f"Привет, {name}!"

Python import (импорт в python)

# main.py
import my_module
message = my_module.greet("Мир")
print(message)

Import модуля python (импорт модуля в python)

Привет, Мир!

Import hello python (импорт модуля hello в python (пример))

Типичные ошибки: Если файл не найден, возникает ModuleNotFoundError. Причина может быть в неправильном написании имени или в том, что файл находится в другой папке. Решение - проверить расположение и имя файла, а также убедиться, что файл имеет расширение .py.

Как импортировать только определённые функции или классы?

Для импорта конкретных объектов из модуля используется конструкция from module import function, Class. Это позволяет обращаться к ним напрямую, без префикса модуля. Например, from my_module import greet и затем greet("Мир"). Такой подход уменьшает объём кода и улучшает читаемость, но может привести к конфликтам имён, если в разных модулях есть одинаковые функции.

from math import sqrt, pi
print(sqrt(16))
print(pi)

Python 3 import file (импорт файла в python 3)

4.0
3.141592653589793
Проблемы: Если импортируется имя, которое уже определено в текущей области видимости, оно будет перезаписано. Решение - использовать алиасы (from math import sqrt as square_root) или избегать импорта «звёздочкой» (from module import *), который загрязняет пространство имён.

Как переименовать импортируемый модуль или объект?

Для создания псевдонима (alias) используется ключевое слово as. Это полезно, чтобы сократить длинное имя модуля или избежать конфликтов. Например, import numpy as np или from pandas import DataFrame as df. После этого обращаться к модулю нужно через псевдоним.

import datetime as dt
now = dt.datetime.now()
print(now)
2025-03-27 12:34:56.789012
Ошибки не возникают, если псевдоним не совпадает с уже существующими переменными. Стоит выбирать осмысленные имена.

Как импортировать файл из поддиректории (пакет)?

Если файл находится внутри папки, эта папка должна быть пакетом. Для этого в папке создаётся файл __init__.py (может быть пустым). Затем импорт выполняется через точку: import folder.module или from folder.module import function. Внутри пакета можно использовать относительные импорты с точками: from . import sibling (импорт из той же папки) или from .. import parent (из родительской папки). Относительные импорты удобны при перемещении пакета целиком.

# Структура:
# project/
#   main.py
#   utils/
#       __init__.py
#       helpers.py
#       constants.py
# helpers.py
def add(a, b):
    return a + b
# constants.py
PI = 3.14159
# main.py
from utils.helpers import add
from utils.constants import PI
print(add(2, 3))
print(PI)
5
3.14159
Частые ошибки: ModuleNotFoundError: No module named 'utils' - если папка не содержит __init__.py или не находится в пути поиска. При относительных импортах внутри скрипта, запущенного как основной, возникает ImportError: attempted relative import with no known parent package. Это происходит, когда скрипт с относительным импортом запускается напрямую, а не как часть пакета. Решение - запускать скрипт из родительской директории с помощью python -m package.module.

Как импортировать файл из другого каталога, не входящего в стандартный путь поиска?

Python ищет модули в списке директорий sys.path. Чтобы добавить свой каталог, нужно временно расширить этот список. Обычно это делается в начале скрипта: import sys; sys.path.append('/путь/к/папке'). После этого можно импортировать модуль из этой папки обычным способом. Альтернативный вариант - установить переменную окружения PYTHONPATH перед запуском.

import sys
sys.path.append('/home/user/my_lib')
import my_special_module
print(my_special_module.some_function())
Проблемы: Добавление путей напрямую снижает переносимость кода и может привести к конфликтам. Лучше использовать пакетную структуру с установкой через pip install -e . или использовать importlib для динамической загрузки.

Как выполнить динамический импорт модуля по имени (строке)?

Иногда имя модуля становится известно только во время выполнения. Для этого используется модуль importlib. Функция importlib.import_module() принимает строку с именем модуля и возвращает объект модуля. Это позволяет загружать модули из конфигурационных файлов, плагинов и т.п.

import importlib
module_name = "math"
math_module = importlib.import_module(module_name)
print(math_module.sqrt(25))
5.0
Ошибки: ModuleNotFoundError - если модуль с таким именем не существует. Стоит обрабатывать исключение. Также динамический импорт не подходит для относительных импортов внутри пакетов.

Расширенные примеры импорта файлов в Python 3

Пример 1: Структура проекта с пакетами и относительными импортами

Создадим проект со следующим деревом:

project/
    main.py
    package/
        __init__.py
        subpackage/
            __init__.py
            deep.py
        utils.py

Файл utils.py:

Пример
def multiply(a, b):
    return a * b

Файл deep.py:

Пример
from ..utils import multiply  # относительный импорт из родительской папки
def square(x):
    return multiply(x, x)

Файл main.py (запускается из корня командой python -m project.main):

Пример
from package.subpackage.deep import square
print(square(4))
16

Пример 2: Импорт модуля из zip-архива

Python может импортировать модули из zip-файлов, если добавить путь к архиву в sys.path.

Создадим архив mylib.zip, содержащий helper.py с функцией add(a, b). Затем в скрипте:

Пример
import sys
sys.path.insert(0, '/path/to/mylib.zip')
import helper
print(helper.add(10, 20))
30

Пример 3: Использование importlib для загрузки модуля по полному пути к файлу

Иногда нужно загрузить файл, который не является частью пакета и не лежит в sys.path. Для этого используется importlib.util с указанием абсолютного пути.

Пример
import importlib.util
import sys

file_path = '/home/user/scripts/external.py'
spec = importlib.util.spec_from_file_location("external", file_path)
module = importlib.util.module_from_spec(spec)
sys.modules["external"] = module
spec.loader.exec_module(module)

# Теперь можно использовать module
print(module.some_function())

Пример 4: Импорт C-расширения (.so/.pyd)

Python умеет импортировать скомпилированные C-расширения, например, _socket. Обычно они находятся в стандартной библиотеке или устанавливаются через pip. Если своё расширение скомпилировано в файл myext.cpython-3x-x86_64-linux-gnu.so, его можно импортировать как обычный модуль, если он находится в sys.path.

Пример
import myext
print(myext.my_c_function())

Пример 5: Импорт с использованием __import__ (встроенная функция, устаревшая)

Встроенная функция __import__ тоже позволяет динамически импортировать модуль, но её использование не рекомендуется в пользу importlib.

Пример
module = __import__('json')
print(module.dumps({'key': 'value'}))
{"key": "value"}

Импорт файла в Python 3 - comments

En
Python 3 import file (python)