Установка зависимостей локальной зависимости с помощью pipenv - PullRequest
0 голосов
/ 27 ноября 2018

Фон

У нас есть проект со следующей структурой каталогов высокого уровня *

./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 Ответ

0 голосов
/ 27 ноября 2018

Нашел решение благодаря этому комментарию в теме выпуска pipenv: https://github.com/pypa/pipenv/issues/209#issuecomment-337409290

Я продолжил перечислять зависимости core в setup.py.

I 'мы изменили приложения web и notebook для использования редактируемой установки пакета core.
Это было сделано путем запуска следующего в каталоге web и notebooks::

pipenv install --editable ../core

Он создал этот diff

[packages]
- datascience-core = {path = "./../core"}
+ datascience-core = {editable = true,path = "./../core"}

Теперь запуск pipenv install из каталога web и notebooks приводит к установке пакета core и егоЗависимости!

Это также решило еще одну очень неприятную проблему, которая заключалась в pipenv install каждый раз, когда происходило изменение в core.Теперь он принимает изменения разработки без необходимости переустанавливать локальный пакет!

...