Сообщить об ошибке.

Импорт модуля Python из другого места

Содержание:

Есть несколько способов подключиться к модулю из другого расположения. Выберите подход в зависимости от ваших потребностей и структуры проекта.

Вариант 1: /storage/other_module - это директория (пакет)

Если это директория с файлом __init__.py, то это Python-пакет.

Добавление пути в sys.path

# /home/user/project/run.py
import sys
import os

# Добавляем путь к родительской директории модуля
sys.path.insert(0, '/storage')

# Теперь можно импортировать
from other_module import some_module
# или
import other_module.submodule

Использование относительного импорта (если в одном пакете)

Если ваш проект тоже в пакете, можно использовать относительные импорты

from ...storage.other_module import some_module

Создание symlink

# В терминале
ln -s /storage/other_module /home/user/project/other_module

Теперь можно импортировать как локальный модуль

from other_module import some_module

Вариант 2: /storage/other_module.py - это файл

Прямое добавление пути

# /home/user/project/run.py
import sys
sys.path.insert(0, '/storage')

# Импортируем модуль
import other_module

Использование importlib

import importlib.util
import sys

# Указываем путь к файлу
module_path = '/storage/other_module.py'
module_name = 'other_module'

# Загружаем спецификацию модуля
spec = importlib.util.spec_from_file_location(module_name, module_path)
module = importlib.util.module_from_spec(spec)
sys.modules[module_name] = module
spec.loader.exec_module(module)

# Теперь используем модуль
result = module.some_function()

Динамический импорт

Создаем загрузчик для модуля

from importlib.machinery import SourceFileLoader

module = SourceFileLoader('other_module', '/storage/other_module.py').load_module()

# Используем модуль
module.some_function()

Рекомендуемый подход

Для обоих случаев самый чистый способ - добавить путь в sys.path:

# /home/user/project/run.py
import sys
import os

# Добавляем путь к storage в sys.path
sys.path.insert(0, '/storage')

# Теперь импортируем
try:
    # Если это пакет (директория)
    from other_module import some_module
except ImportError:
    # Если это файл
    import other_module

# Используем модуль

Альтернатива: установка как пакета

Вы можете создать setup.py для вашего модуля и установить его:

# setup.py в /storage
from setuptools import setup, find_packages

setup(
    name='other_module-module',
    version='0.1',
    packages=find_packages(),
)
pip install -e /storage

Теперь можно импортировать из любого места:

from other_module import some_module