Docker возвращает ModuleNotFoundError, несмотря на установленную переменную $ PYTHONPATH - PullRequest
0 голосов
/ 17 марта 2020

У меня docker с воздушным потоком, при попытке запустить скрипт python с помощью Airflow он возвращает:

ModuleNotFoundError: No module named 'others'

Если я печатаю echo $PYTHONPATH, я получаю :/libraries:/database_libraries:/others Печать whoami Я получаю: airflow

Все три оператора, работающие в группе обеспечения доступности баз данных.

Если я попадаю на машину docker и эти операторы через Bash, я получаю:

whoami: --> airflow
echo $PYTHONPATH: --> :/libraries:/database_libraries:/others
python script.py(previously did: cd /usr/local/airflow/dags) --> ModuleNotFoundError

Он также не работает при использовании python в терминале, та же ошибка. Но это работает. Если я сделаю cd /, а затем python script.py (что ж, он возвращает разрешение, запрещенное для файла журнала, созданного самим сценарием)

Могут ли обе проблемы быть связаны с разрешениями? У меня нет pwd пользователя root, потому что docker создано FROM puckel/docker-airflow:1.10.1

Редактировать

sys.path имеет следующее:

/
/libraries
/database_libraries
/others
/usr/local/lib/python36.zip
/usr/local/lib/python3.6
/usr/local/lib/python3.6/lib-dynload
/usr/local/lib/python3.6/site-packages

Редактировать 2:

Dockerfile

#Base image
FROM puckel/docker-airflow:1.10.1

#Impersonate
USER root

#Los automatically thrown to the I/O strem and not buffered.
ENV PYTHONUNBUFFERED 1

ENV AIRFLOW_HOME=/usr/local/airflow
ENV PYTHONPATH "${PYTHONPATH}:/libraries"

WORKDIR /
#Add docker source files to the docker machine
ADD ./docker_resources ./docker_resources
#Install libraries and dependencies
RUN apt-get update && apt-get install -y vim
RUN pip install --user psycopg2-binary
RUN pip install -r docker_resources/requirements.pip

РЕДАКТИРОВАТЬ 3 Я знаю, что происходит , но не знаю, как это исправить. Если я сделаю:

cd /usr/local/airflow
python
 import libraries

Сбой, с ModuleNotFoundError Но если до этого я переместить папку библиотек в /usr/local/airflow, а затем сделаю это, это работает. Несмотря на то, что PYTHONPATH не меняется. Таким образом, кажется, что импорт ищет папку в текущем каталоге.

Как это исправить?

Сценарий делает: import utils, что, возможно, заключается в том, что он не понимает указанное root в PYTHONPATH?

1 Ответ

0 голосов
/ 19 марта 2020

PYTHONPATH установлен на /libraries, поэтому python ищет:

  1. /libraries/libraries.py
  2. /libraries/libraries папка с init.py

Я установил PYTHONPATH на /, поэтому он ищет: /libraries.py или /libraries с init.py

...