Как я могу разработать пакет библиотеки Python при тестировании проекта с использованием Pycharm + Docker? - PullRequest
0 голосов
/ 25 октября 2018

Это довольно специфический вопрос, поэтому я открыт для полезных предложений, которые помогут вам в этом.

У меня есть проект Python, который выполняется внутри контейнера Docker, настроенного для работы с отладчиком Pycharm.У меня есть пакет, установленный в виртуальном окружении с pip, используемый в этом проекте, который я хотел бы разработать.

Я не нашел способа связать пакет с докером-контейнером моего проекта таким образом, чтобы я мог изменить пакет и получить обновление кода в моем проекте.В настоящее время отладчик работает с кодовыми путями, которые входят в пакет, если я не изменяю код в пакете.

Эти две проблемы в совокупности затрудняют тестирование изменений в пакете без его установки поверхи снова.

Есть ли лучший способ достичь этой цели?

Ответы [ 4 ]

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

Я думаю, что я охватил все основы, которые я обрисовал выше, с помощью этой системы:

Моя структура проекта:

projects
   projectA (my docker project)
   projectB (the library used in my docker project that I want to develop on)
  1. В проекте A: настройки проекта-> интерпретатор проекта -> добавить сопоставления путей -> сопоставить путь локальной библиотеки с путем удаленной установки в контейнере

    ex. локальный путь: / пользователь / {имя пользователя} / projects / projectB удаленный путь: /usr/local/lib/python3.6/site-packages/projectB

  2. В проекте A: настройки проекта -> структура проекта -> добавить корень контента (projectB) -> выбрать отметку как источники

  3. в проекте A:пометить путь к projectB в контейнере как том в файле dockerfile

    ex.ОБЪЕМ /usr/local/lib/python3.6/site-packages/projectB

  4. В проекте A: загрузить локальную библиотеку в качестве тома для установки библиотеки на контейнере в docker-compose.yml

    отл.

тома:

- ../projectB:/usr/local/lib/python3.6/site-packages/projectB

Использование Python 3.6 и Pycharm 2018.2

0 голосов
/ 26 октября 2018

Вы можете попробовать использовать комбинацию из предложенного @pbskumar и тома докера .

Сначала запустите свой контейнер с параметром --volume /path/to/your/package/on/host/:/path/in/your/container

И затем выполните это внутриконтейнер: pip install -e /path/in/your/container

должно работать.

0 голосов
/ 26 октября 2018

С учетом двух исходных деревьев, которые должны работать вместе:

  1. Создать для них виртуальную среду, python -m venv vpy.
  2. Активировать ее, задав соответствующие переменные среды оболочки, . vpy/bin/activate.
  3. Установите библиотеку, cd library && pip install -e . (-e заставляет pip запомнить указатель на живое исходное дерево.)
  4. Установите приложение, cd app && pip install -e ..(Пип должен знать, что у вас уже установлена ​​библиотека.)
  5. Делайте все, что вам нужно, $EDITOR file.py; pytest; the_app; $SCM commit.
  6. Как только все будет работать правильно, docker build && docker run.

Я бы оставил любое взаимодействие с Docker до самого конца, как только вы убедились, что исправили ошибку библиотеки или создали эту функцию.Это позволяет избежать проблем с вашим редактором и несогласованностью путей в контейнере, и это означает, что вам не нужны привилегии root ни для одной из ваших обычных разработок.

0 голосов
/ 25 октября 2018

Установите пакет в редактируемом режиме.

pip install -e .

Это позволит вам вносить изменения в код и обновлять пакет одновременно.

...