我有一个带有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正在寻找:
/libraries/libraries.py
- 带有
init.py
的/libraries/libraries
文件夹
我将PYTHONPATH
设置为/
,因此它会查找:/libraries.py
或带有init.py
的/libraries