气流设置python库版本以提高构建速度



过去,构建我们的气流部署的docker映像需要大约5分钟,而突然间,它花费了一个多小时。话虽如此,我们已经有几个月没有重建我们的形象了,所以不确定问题是什么时候出现的……

看起来https://stackoverflow.com/questions/65122957/resolving-new-pip-backtracking-runtime-issue是罪魁祸首。在构建过程中,我们看到了很多类似这样的警告:

=> => #   Downloading google_cloud_os_login-2.3.1-py2.py3-none-any.whl (42 kB)                                                          
=> => # INFO: This is taking longer than usual. You might need to provide the dependency resolver with stricter constraints             
=> => # to reduce runtime. See https://pip.pypa.io/warnings/backtracking for guidance. If you want to abort this run, press             
=> => # Ctrl + C.   
=> => #   Downloading google_cloud_os_login-2.2.1-py2.py3-none-any.whl (41 kB)                                                          
=> => #   Downloading google_cloud_os_login-2.2.0-py2.py3-none-any.whl (44 kB) 

下面是Dockerfile中耗时一小时的那行+

RUN set -ex 
&& buildDeps=' 
freetds-dev 
libkrb5-dev 
libsasl2-dev 
libssl-dev 
libffi-dev 
libpq-dev 
git 
' 
&& apt-get update -yqq 
&& apt-get install -yqq --no-install-recommends 
$buildDeps 
freetds-bin 
build-essential 
apt-utils 
curl 
rsync 
netcat 
locales 
&& sed -i 's/^# en_US.UTF-8 UTF-8$/en_US.UTF-8 UTF-8/g' /etc/locale.gen 
&& locale-gen 
&& update-locale LANG=en_US.UTF-8 LC_ALL=en_US.UTF-8 
&& useradd -ms /bin/bash -d ${AIRFLOW_USER_HOME} airflow 
&& pip install -U pip setuptools wheel 
&& pip install pytz 
&& pip install pyOpenSSL 
&& pip install ndg-httpsclient 
&& pip install pyasn1 
&& pip install apache-airflow[crypto,postgres,slack,kubernetes,gcp,docker,ssh]==${AIRFLOW_VERSION} 
&& if [ -n "${PYTHON_DEPS}" ]; then pip install ${PYTHON_DEPS}; fi 
&& apt-get purge --auto-remove -yqq $buildDeps 
&& apt-get autoremove -yqq --purge 
&& apt-get clean 
&& rm -rf 
/tmp/* 
/var/tmp/* 
/usr/share/man 
/usr/share/doc 
/usr/share/doc-base 
/var/lib/apt/lists/*
... 
...
COPY requirements.txt /requirements.txt
RUN pip install -r /requirements.txt

这是requirements.txt

google-cloud-core==1.4.1
google-cloud-datastore==1.15.0
gcsfs==0.6.1
flatten-dict==0.4.2
bigquery_schema_generator==1.4
backoff==1.11.1
six==1.13.0
ndjson==0.3.1
pymongo==3.1.2
SQLAlchemy==1.3.15
pandas==1.3.1
numpy==1.21.1
billiard

我实际上很困惑关于google_cloud_os_login的这个特定的警告消息,因为挂起的构建步骤是我从RUN set -ex开始共享的行,它看起来没有任何谷歌云安装?我们通过requirements.txt (-core, -datastore)安装一些google cloud的东西,但是在我们的dockerfile中,COPY和RUN pip install在requirements.txt上的行要少得多(如…所示)。许多库都会弹出这些警告,但是看起来google_cloud_os_login确实是占用大量时间的罪魁祸首。

RUN set -ex ...命令的哪里提示安装google_cloud_os_login?我们如何在这个库上设置一个特定的版本号来加快docker镜像的构建?

我想你看到的各种google包都是apache-airflow[gcp]的依赖项。

为了加快安装速度,文档建议您使用他们提供的约束文件之一。它们创建名为constraints-<version>的标签,其中包含可以通过--constraint传递给pip的文件。

例如,当试图安装2.2.0时,有一个constraints-2.2.0标记。在这个标记的文件树中,您将看到像constraints-3.8.txt这样的文件,其中3.8是我正在使用的python版本。

pip install apache-airflow[gcp]==2.2.0 --constraint "https://raw.githubusercontent.com/apache/airflow/constraints-2.2.0/constraints-3.8.txt"

相关内容

  • 没有找到相关文章

最新更新