Установка зависимостей локальной зависимости с помощью pipenv
Фон
У нас есть проект со следующей структурой каталогов высокого уровня *
./datascience/
├── core
│ └── setup.py
├── notebooks
│ └── Pipfile
└── web
└── Pipfile
* Исключены все не относящиеся к делу файлы и каталоги для краткости.
core
Пакет представляет собой библиотеку. Это зависимость как notebooks
а также web
Приложения.
core
Пакет, будучи библиотекой, имеет свои зависимости, указанные в setup.py
import setuptools
setuptools.setup(
install_requires=[
'some-dependency',
'another-dependency'
]
)
web
а также notebooks
приложения используют pipenv для управления зависимостями. Их зависимости указаны в Pipfile
,
Например, вот как web
зависимости указаны в web/Pipfile
:
[packages]
datascience-core = {path = "./../core"}
flask = "~= 1.0"
Обратите внимание, как core
Зависимость - это локальная зависимость, отсюда и относительный путь.
проблема
Делать pipenv install
изнутри web
или же notebooks
каталог, не устанавливает зависимости core
библиотека как я и ожидал!
Я также пытался использовать Pipfile
за core
в надежде, что pipenv выберет его в своем графике и загрузит все вложенные зависимости. Но это не так.
Как могут зависимости core
приложение будет установлено автоматически, когда pipenv устанавливает зависимости для web
или же notebooks
приложение?
1 ответ
Благодаря этому комментарию нашел решение в теме выпуска pipenv: https://github.com/pypa/pipenv/issues/209
Я продолжил перечислять core
Зависимости в setup.py
,
Я изменил web
а также notebook
приложения для использования редактируемой установки core
пакет.
Это было сделано путем запуска следующего в обоих web
а также notebooks
каталог:
pipenv install --editable ../core
Это произвело это различие
[packages]
- datascience-core = {path = "./../core"}
+ datascience-core = {editable = true,path = "./../core"}
Сейчас работает pipenv install
от web
а также notebooks
каталог приводит к установке core
пакет и его зависимости!
Это также решило еще одну очень неприятную проблему, которая заключалась в pipenv install
каждый раз происходило изменение core
, Теперь он принимает изменения разработки без необходимости переустанавливать локальный пакет!