如何设置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
我正在构建一个 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