Docker返回ModuleNotFoundError,尽管设置了$PYTHONPATH



我有一个带有airflow的docker,当尝试使用airflow运行python脚本时,它返回:

ModuleNotFoundError: No module named 'others'

如果我打印echo $PYTHONPATH,我会得到:/libraries:/database_libraries:/others打印whoami我得到:airflow

DAG中运行的所有三个语句。

如果我进入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(好吧,它从脚本本身创建的记录器文件返回Permission denied(

这两个问题都与许可有关吗?我没有根用户的密码,因为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然后这样做,它就起作用了。尽管没有改变巨蟒。因此,导入似乎会搜索当前目录中的文件夹。

如何修复?

脚本做了:import utils,这可能是因为它不理解PYTHONPATH中指定的根?

PYTHONPATH设置为/libraries,因此python正在寻找:

  1. /libraries/libraries.py
  2. 带有init.py/libraries/libraries文件夹

我将PYTHONPATH设置为/,因此它会查找:/libraries.py或带有init.py/libraries

最新更新