Как установить путь локального модуля в python для распознавания в CircleCI? - PullRequest
0 голосов
/ 11 февраля 2020

Я строю python модуль. Чтобы определить его путь, файл .pth был определен следующим образом:

# creation of the virtual environment
python -v venv env

# activation of the newly creation virtual environment
source env/bin/activate

Для установки пути моего модуля ( мой модуль находится в packages/regression_model/regression_model) Я создал этот .pth файл env/lib/python3.7/site-packages/regression_model.pth, который содержит:

# env/lib/python3.7/site-packages/regression_model.pth
../../../../packages/regression_model

Теперь, в любом месте моего проекта, я могу импортировать свой модуль regression_model с помощью этой команды:

import regression_model

На самом деле моя цель - использовать CircleCI для развертывания моего проекта.

CircleCI настроен следующим образом:

version: 2
jobs:
  test_regression_model:
    working_directory: ~/project
    docker:
      - image: circleci/python:3.7.6
        environment: # environment variables for primary container
          PYTHONPATH: ~/project/packages/regression_model:~/project/packages/ml_api
    steps:
      - checkout
      - run:
          name: Runnning tests
          command: |
            virtualenv venv
            . venv/bin/activate
            pip install --upgrade pip
            pip install -r packages/regression_model/requirements.txt
            chmod +x ./scripts/fetch_kaggle_dataset.sh
            ./scripts/fetch_kaggle_dataset.sh
            python packages/regression_model/regression_model/train_pipeline.py
            py.test -vv packages/regression_model/tests

workflows:
  version: 2
  test-all:
    jobs:
      - test_regression_model

Проблема Я сталкиваюсь с тем, что CircleCI указывает, что мой модуль не может быть импортирован

Traceback (most recent call last):
  File "packages/regression_model/regression_model/train_pipeline.py", line 4, in <module>
    from regression_model import pipeline
ModuleNotFoundError: No module named 'regression_model'

Чтобы решить эту проблему, путь к этому модулю regression_model должен быть определен именно так, как он было сделано на месте. Тогда возникает вопрос: как определить путь в CircleCI?

Я пытался сделать это с помощью переменной среды PYTHONPATH, но безуспешно.

Есть предложения?

1 Ответ

0 голосов
/ 14 февраля 2020

Я нашел решение. Подобно тому, как это было сделано вручную на моем локальном компьютере, я просто определяю 2 командные строки, чтобы сделать это в CircleCI:

echo "../../../../packages/regression_model" >> env/lib/python3.7/site-packages/extra.pth
echo "../../../../packages/ml_api" >> env/lib/python3.7/site-packages/extra.pth

И ниже полного файла yml на тот случай, если он может помочь другим.

version: 2
jobs:
  test_regression_model:
    working_directory: ~/project
    docker:
      - image: circleci/python:3.7.6
    steps:
      - checkout
      - run:
          name: Runnning tests
          command: |
            virtualenv env
            . env/bin/activate
            pip install --upgrade pip
            pip install -r packages/regression_model/requirements.txt
            echo "../../../../packages/regression_model" >> env/lib/python3.7/site-packages/extra.pth
            echo "../../../../packages/ml_api" >> env/lib/python3.7/site-packages/extra.pth
            chmod +x ./scripts/fetch_kaggle_dataset.sh
            ./scripts/fetch_kaggle_dataset.sh
            sudo apt-get install unzip
            unzip  packages/regression_model/regression_model/datasets/house-prices-advanced-regression-techniques.zip -d packages/regression_model/regression_model/datasets/
            python packages/regression_model/regression_model/train_pipeline.py
            py.test -vv packages/regression_model/tests

workflows:
  version: 2
  test-all:
    jobs:
      - test_regression_model
...