【发布时间】:2019-09-09 00:56:31
【问题描述】:
这真的让我很烦。
这是包含 Dockerfile 的文件夹的层次结构。
server
- __init__.py
- nlp
- core.py
- Dockerfile
- server.py
这是我的 Dockerfile。
FROM continuumio/miniconda3
COPY . /usr/src/app
WORKDIR /usr/src/app
RUN conda env create -f environment.yml
# Pull the environment name out of the environment.yml
RUN echo "source activate $(head -1 environment.yml | cut -d' ' -f2)" > ~/.bashrc
ENV PATH /opt/conda/envs/$(head -1 environment.yml | cut -d' ' -f2)/bin:$PATH
RUN /bin/bash -c "source ~/.bashrc" && /opt/conda/envs/rdqcc_nlp/bin/python -m spacy download en_core_web_sm
ENV PATH "/opt/conda/envs/rdqcc_nlp/bin/python:${PATH}"
ENV PYTHONPATH "${PYTHONPATH}:/usr/src/app:/usr/src/app/nlp"
CMD ["/opt/conda/envs/rdqcc_nlp/bin/python", "server.py"]
这是我在server.py 中导入 nlp 模块的方法。
from .nlp.core import NLP
我也试过
from server.nlp.core import NLP
但同样的错误弹出
ModuleNotFoundError: No module named '__main__.nlp'; '__main__' is not a package
或者
ModuleNotFoundError: No module named 'server.nlp'; '__main__' is not a package
我是否设置了错误的PYTHONPATH?我应该怎么办?顺便说一句,我使用docker-compose 调用从server 文件夹构建的服务。
【问题讨论】:
-
您可以通过
echoenvvars 和sys.path和ls目录结构来诊断这个... -
@ivan_pozdeev 感谢您的建议。你知道
PYTHONPATH到底是做什么的吗?由于我在 Pycharm 中一切正常,我想知道如何填补 docker 和 PyCharm 之间的空白。
标签: python docker pythonpath