无法在Docker镜像上导入Django GitLab CI
问题描述:
我尝试在gitlab ci中运行我的django测试python manage.py test
。因此我正在使用一个泊坞窗图像。泊坞窗图像建立很好,但是当它运行在gitlab的测试中,我得到ImportError: No module named 'django'
和无法在Docker镜像上导入Django GitLab CI
Couldn't import Django. Are you sure it's installed and available on your PYTHONPATH environment variable? Did you forget to activate a virtual environment?
见我.gitlab-ci.yml
image: registry.gitlab.com/app/core:latest
services:
- postgres:latest
stages:
- test
variables:
SECRET_KEY: test-secret
POSTGRES_DB: ...
POSTGRES_USER: ...
POSTGRES_PASSWORD: ...
python_tests:
stage: test
before_script:
- export DATABASE_NAME=...
- export DATABASE_USER=...
- export DATABASE_PASSWORD=...
- export DATABASE_HOST=postgres
- source /app/venv/bin/activate
script:
- python manage.py test
和Dockerfile
FROM ubuntu:16.04
RUN apt-get update -y -qq
RUN apt-get install -y -qq build-essential libffi-dev libpq-dev libfontconfig1
RUN apt-get install -y -qq python3 python3-dev python3-pip
RUN apt-get install -y -qq libpq-dev
RUN apt-get install -y -qq nodejs npm
WORKDIR /app
# pip
COPY requirements.txt /app
RUN pip3 install --upgrade pip
RUN pip3 install virtualenv
RUN virtualenv --no-site-packages venv
RUN . venv/bin/activate
RUN pip3 install -r /app/requirements.txt
# npm
RUN ln -s `which nodejs` /usr/bin/node
COPY web/vueapp/package.json /app
RUN npm install
答
那么你有一个问题你的方法。考虑你的运行,下面的语句在Dockerfile
RUN . venv/bin/activate
RUN pip3 install -r /app/requirements.txt
上述两个声明都像开两个终端,在一个执行. venv/bin/activate
和一个pip3 install -r /app/requirements.txt
所以你的环境被激活,你让它关闭,然后下一个PIP3语句安装在全局程序包上。所以,你的代码更改下面
RUN . venv/bin/activate && pip3 install -r /app/requirements.txt
当你正在运行脚本您正在激活的环境,然后运行的是空白,没有包装的虚拟环境中蟒manager.py。所以上面的改变应该为你解决这个问题