如何设置python中本地模块的路径在CircleCI中被识别?

how to set the path of local module in python to be recognized in CircleCI?

我正在构建一个 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

其实我的objective是用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来做到这一点,但没有成功。

有什么建议吗?

我找到了解决办法。与在我的本地机器上手动完成的类似,我只定义了 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