Здравствуйте! Структурирование репозиториев на Python действительно может быть сложной задачей, особенно когда вы имеете дело с несколькими модулями, которые зависят друг от друга. Ваша ситуация с репозиториями A, B и C предполагает, что вам необходимо организовать их так, чтобы минимизировать проблемы с импортом и упростить работу с тестами. Вот несколько рекомендаций, которые могут помочь:
### 1. Использование виртуального окружения
Первое, что стоит сделать — это убедиться, что вы работаете в отдельном виртуальном окружении (например, venv или conda), что позволит вам управлять зависимостями и пакетами для каждого проекта отдельно.
### 2. Организация пакетов
Каждый из ваших репозиториев должен быть самостоятельным Python-пакетом. Это означает, что у вас должен быть файл `setup.py` (или `pyproject.toml`) в каждом репозитории, чтобы можно было их устанавливать и импортировать как пакеты. Структура каждого репозитория может быть следующей:
```
A/
├── setup.py
├── src/
├── tests/
└── requirements.txt
B/
├── setup.py
├── src/
└── requirements.txt
C/
├── setup.py
├── src/
└── requirements.txt
```
### 3. Установка зависимостей
Вместо того чтобы добавлять репозитории B и C в PYTHONPATH, вы можете установить их в ваше виртуальное окружение. Например, вы можете использовать `pip` для установки локальных пакетов:
```bash
pip install -e /path/to/B
pip install -e /path/to/C
```
Это создаст символические ссылки на ваш код и позволит вам импортировать их как обычные модули:
```python
from B import fixtures
from C import conftest
```
### 4. Упрощение импорта в тестах
Теперь, когда B и C установлены в ваше виртуальное окружение, вы можете импортировать фикстуры в `conftest.py` без проблем:
```python
from B.fixtures import *
from C.conftest import *
```
### 5. Использование Git Submodules
Если вы предпочитаете оставить репозитории B и C как подмодули в A, вы можете использовать `poetry` или аналогичные инструменты для управления зависимостями. Убедитесь, что вы добавили правильные пути в `pyproject.toml`.
### 6. CI/CD и тестирование
Если ваш проект предполагает использование CI/CD, убедитесь, что система сборки корректно настраивает ваше окружение и устанавливает все необходимые зависимости перед запуском тестов.
### Заключение
Описанные подходы помогут вам организовать ваши репозитории таким образом, чтобы избежать проблем с импортом и сделать ваш код более чистым и понятным. Главное — обеспечить независимость модулей и отсутствие циклических зависимостей, что упростит дальнейшую поддержку кода.