Create local package#

📦 1. Общий модуль внутри каталога проектов#

Представим такую структуру:

nlp-projects/
├── common/                    ← Общие классы и утилиты
│   ├── __init__.py
│   ├── text_cleaner.py
│   └── tokenizer.py
├── project1/
│   ├── main.py
│   └── config.yaml
├── project2/
│   ├── app.py
│   └── some_module.py
└── requirements.txt

✅ 2. Импорт из common в других проектах#

Способ 1 — добавление корня в sys.path#

В начале main.py или app.py:

import sys
import os

sys.path.append(os.path.abspath(os.path.join(os.path.dirname(__file__), '..')))
from common.text_cleaner import TextCleaner

💡 Работает во всех IDE и при запуске из командной строки.


Способ 2 — запуск из корня#

Если ты запускаешь проекты из корня каталога:

cd nlp-projects
python project1/main.py

и внутри main.py используешь просто:

from common.text_cleaner import TextCleaner

📌 Условие: корень должен быть в PYTHONPATH, что IDE типа PyCharm, VS Code умеют делать автоматически.


🧰 3. Добавить __init__.py во все папки#

Это сделает каталог полноценным Python-пакетом и упростит импорты:

touch common/__init__.py
touch project1/__init__.py
touch project2/__init__.py

💼 4. Альтернатива: сделать common локальным installable пакетом#

Можно превратить common в мини-библиотеку:

nlp-projects/
├── common/
│   ├── common/
│   │   ├── __init__.py
│   │   ├── text_cleaner.py
│   │   └── tokenizer.py
│   └── setup.py

setup.py:

from setuptools import setup, find_packages

setup(
    name='common',
    version='0.1',
    packages=find_packages(),
)

Затем устанавливаешь локально:

cd nlp-projects/common
pip install -e .

или

pip install -e ./common

И в любом проекте можно писать:

from common.text_cleaner import TextCleaner

Явное указание пути к общим модулям#

  • для файлов .py:

sys.path.append(os.path.abspath(os.path.join(os.path.dirname(__file__), '..')))
  • для файлов .ipynb:

project_root = os.path.abspath(os.path.join(os.getcwd(), '..'))
if project_root not in sys.path:
    sys.path.insert(0, project_root)