У меня есть проект python со структурой проекта с родственным импортом (импорт пакетов с одного уровня в структуру каталогов). Я смог заставить это работать с помощью инструментов настройки.
У меня есть setup.py со следующим на верхнем уровне моего пакета:
from setuptools import setup, find_packages
setup(name='myproject', version='1.0',
packages=find_packages(), python_requires='>=3.4')
Затем я сделал pip3 install -e .
, который позволил мне импортировать одноуровневые модули, добавляя к операторам импорта префикс myproject.
. Это отлично работает, но когда я добавляю этот код в систему управления версиями и клонирую проект в другом месте, я сталкиваюсь с теми же проблемами с импортом родственных элементов. Есть ли способ избежать запуска этой команды для установки моего пакета верхнего уровня через pip каждый раз, когда кто-то клонирует это репо? Я пытался сделать все это в virtualenv и активировать его в месте, которое клонирует репо, а также поместить каталог .egg-info
в систему управления версиями, но безрезультатно. Как я могу распространять этот пакет, чтобы, если этот репозиторий был клонирован, другие могли запускать код?
Я относительно новичок в python, поэтому заранее извиняюсь, если я упустил что-то очевидное. Если есть лучшие предложения по распространению этого кода, я также открыт для обучения. Заранее спасибо!
Изменить: (следуйте комментариям) Структура моего проекта (упрощенная) похожа на (ниже), где модули в a и b должны будут импортировать друг друга. Я смог сделать это, как упоминалось выше, но мой вариант использования потребует от меня развертывания этого кода и запуска скрипта по расписанию (предположим, a.py). Если у меня есть конвейер, развертывающий этот код, он должен работать без необходимости вручную запускать «pip install». Хотя я использовал инструменты настройки для решения проблемы с импортом родственных файлов, я понимаю, что это может быть неверный подход, и открыт для предложений. Заранее спасибо!
.
├── project
│ ├── a
│ │ ├── a.py
│ │ └── __init__.py
│ ├── b
│ │ ├── b.py
│ │ └── __init__.py
│ └── __init__.py
setuptools
не может помочь (если только вы не хотите, чтобы люди собирали--inplace
для перетасовки файлов в дереве исходного кода, но это обычно бесполезно). ), потому чтоsetuptools
касается установки вещей. - person abarnert   schedule 16.07.2018setuptools
в конце концов. - person hoefling   schedule 16.07.2018__init__.py
из каталогаproject
(при условии, что это корневой каталог в Git), а затем после клонирования репозитория на целевой машине добавил каталогproject
в путь:export PYTHONPATH=/path/to/project
. - person hoefling   schedule 17.07.2018