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

Импортировать собственный модуль можно несколькими способами:

1. Если модуль находится в той же директории, используйте: import my_module или from my_module import my_function.

2. Если модуль находится в другой директории, добавьте эту директорию в sys.path:
import sys
sys.path.append('/путь/к/директории')
import my_module
Или настройте переменную окружения PYTHONPATH.

Убедитесь, что файл модуля имеет расширение .py.

Для импорта собственного модуля в Python есть несколько способов. Рассмотрим основные, вместе с примерами и объяснениями:

1. Модуль в той же директории, что и основной скрипт:

Допустим, у вас есть два файла:

  • my_module.py (содержит ваш модуль)
  • main.py (основной скрипт)

my_module.py может выглядеть так:

# my_module.py
def my_function():
  print("Привет из my_module!")

my_variable = 42

main.py может выглядеть так:

# main.py
import my_module

my_module.my_function()  # Вызов функции из модуля
print(my_module.my_variable)  # Доступ к переменной из модуля

# Или, если вы хотите импортировать конкретные элементы:
from my_module import my_function, my_variable

my_function()
print(my_variable)

# Или, чтобы импортировать все элементы (не рекомендуется):
from my_module import *

my_function()
print(my_variable)

# Или, чтобы дать модулю псевдоним:
import my_module as mm

mm.my_function()
print(mm.my_variable)

2. Модуль в поддиректории:

Допустим, у вас структура такая:

  • main.py
  • my_package/
    • __init__.py (необязательный, но рекомендуемый)
    • my_module.py

my_package/__init__.py может быть пустым или содержать код инициализации пакета.

main.py может выглядеть так:

# main.py
import my_package.my_module

my_package.my_module.my_function()
print(my_package.my_module.my_variable)

# Или:
from my_package import my_module

my_module.my_function()
print(my_module.my_variable)

# Или:
from my_package.my_module import my_function, my_variable

my_function()
print(my_variable)

#Если __init__.py содержит импорт, например `from .my_module import my_function, my_variable`,
#тогда из main.py можно импортировать непосредственно из пакета:
#from my_package import my_function, my_variable

3. Модуль в другой директории, не являющейся поддиректорией:

В этом случае вам нужно добавить путь к директории, содержащей модуль, в sys.path. Это можно сделать двумя способами:

А) Временно (внутри скрипта):

# main.py
import sys
import os

# Предположим, модуль находится в директории 'path/to/my_module'
module_path = os.path.abspath('path/to/my_module')  # Используем абсолютный путь

if module_path not in sys.path:
  sys.path.append(module_path)

import my_module

my_module.my_function()
print(my_module.my_variable)

Б) Постоянно (через переменную окружения PYTHONPATH):

Добавьте путь к директории, содержащей ваш модуль, в переменную окружения PYTHONPATH. Как это сделать, зависит от вашей операционной системы. Например, в Linux/macOS вы можете добавить строку export PYTHONPATH=$PYTHONPATH:/path/to/my_module в ваш .bashrc или .zshrc.

После этого вы сможете импортировать модуль обычным способом: import my_module.

Важные моменты:

  • __init__.py: Этот файл превращает директорию в Python-пакет. Он может быть пустым или содержать код инициализации. Начиная с Python 3.3, __init__.py не является обязательным для простых пакетов, но его рекомендуется использовать для совместимости и ясности.
  • Абсолютные и относительные импорты: Внутри пакетов можно использовать как абсолютные (import my_package.my_module), так и относительные (from . import my_module) импорты. Относительные импорты начинаются с точки (.), обозначающей текущий пакет, или двух точек (..), обозначающих родительский пакет.
  • Имена модулей: Избегайте конфликтов имен. Не называйте ваши модули так же, как стандартные модули Python (например, не создавайте модуль с именем os.py).
  • Пути: Всегда используйте абсолютные пути в production коде.
0