This is an automated email from the ASF dual-hosted git repository.
kaxilnaik pushed a commit to branch v3-0-test
in repository https://gitbox.apache.org/repos/asf/airflow.git
commit 61f39160b62e9f450fb1019f67e61b5bacb465ef
Author: github-actions[bot]
<41898282+github-actions[bot]@users.noreply.github.com>
AuthorDate: Fri Jul 11 16:09:24 2025 +0200
[v3-0-test] Move --no-binary flag to uv command line from pyproject.toml
(#53179) (#53185)
When the flag is specified in pyproject toml, it also forces no
binary installation of xmlsec and lxml for local uv sync which might
fail if some system libraries are not installed, so it is better
to do it in the image by passing the right flags to installer
directly.
(cherry picked from commit 47bbe55355757953507b8ae64cd05f9380e16748)
Co-authored-by: Jarek Potiuk <[email protected]>
---
Dockerfile | 21 +++++++++++----
Dockerfile.ci | 31 +++++++++++++++++-----
scripts/docker/common.sh | 9 ++++---
scripts/docker/entrypoint_ci.sh | 10 +++++--
.../docker/install_airflow_when_building_images.sh | 12 +++++++--
5 files changed, 64 insertions(+), 19 deletions(-)
diff --git a/Dockerfile b/Dockerfile
index 023fb244294..141e6e129d7 100644
--- a/Dockerfile
+++ b/Dockerfile
@@ -473,11 +473,14 @@ function common::get_packaging_tool() {
echo
export PACKAGING_TOOL="uv"
export PACKAGING_TOOL_CMD="uv pip"
- if [[ ${AIRFLOW_INSTALLATION_METHOD=} == "." && -f "./pyproject.toml"
]]; then
+ # --no-binary is needed in order to avoid libxml and xmlsec using
different version of libxml2
+ # (binary lxml embeds its own libxml2, while xmlsec uses system one).
+ # See https://bugs.launchpad.net/lxml/+bug/2110068
+ if [[ ${AIRFLOW_INSTALLATION_METHOD=} == "." && -f "./pyproject.toml"
]]; then
# for uv only install dev group when we install from sources
- export EXTRA_INSTALL_FLAGS="--group=dev"
+ export EXTRA_INSTALL_FLAGS="--group=dev --no-binary lxml
--no-binary xmlsec"
else
- export EXTRA_INSTALL_FLAGS=""
+ export EXTRA_INSTALL_FLAGS="--no-binary lxml --no-binary xmlsec"
fi
export EXTRA_UNINSTALL_FLAGS=""
export UPGRADE_TO_HIGHEST_RESOLUTION="--upgrade --resolution highest"
@@ -875,8 +878,12 @@ function install_from_sources() {
echo
echo "${COLOR_BLUE}Attempting to upgrade all packages to highest
versions.${COLOR_RESET}"
echo
+ # --no-binary is needed in order to avoid libxml and xmlsec using
different version of libxml2
+ # (binary lxml embeds its own libxml2, while xmlsec uses system one).
+ # See https://bugs.launchpad.net/lxml/+bug/2110068
set -x
- uv sync --all-packages --resolution highest --group dev --group docs
--group docs-gen --group leveldb ${extra_sync_flags}
+ uv sync --all-packages --resolution highest --group dev --group docs
--group docs-gen \
+ --group leveldb ${extra_sync_flags} --no-binary-package lxml
--no-binary-package xmlsec
else
# We only use uv here but Installing using constraints is not
supported with `uv sync`, so we
# do not use ``uv sync`` because we are not committing and using
uv.lock yet.
@@ -933,8 +940,12 @@ function install_from_sources() {
echo
echo "${COLOR_BLUE}Falling back to no-constraints
installation.${COLOR_RESET}"
echo
+ # --no-binary is needed in order to avoid libxml and xmlsec using
different version of libxml2
+ # (binary lxml embeds its own libxml2, while xmlsec uses system
one).
+ # See https://bugs.launchpad.net/lxml/+bug/2110068
set -x
- uv sync --all-packages --group dev --group docs --group docs-gen
--group leveldb ${extra_sync_flags}
+ uv sync --all-packages --group dev --group docs --group docs-gen \
+ --group leveldb ${extra_sync_flags} --no-binary-package lxml
--no-binary-packag xmlsec
set +x
fi
fi
diff --git a/Dockerfile.ci b/Dockerfile.ci
index 7fc0d572bf0..8168cc5187c 100644
--- a/Dockerfile.ci
+++ b/Dockerfile.ci
@@ -412,11 +412,14 @@ function common::get_packaging_tool() {
echo
export PACKAGING_TOOL="uv"
export PACKAGING_TOOL_CMD="uv pip"
- if [[ ${AIRFLOW_INSTALLATION_METHOD=} == "." && -f "./pyproject.toml"
]]; then
+ # --no-binary is needed in order to avoid libxml and xmlsec using
different version of libxml2
+ # (binary lxml embeds its own libxml2, while xmlsec uses system one).
+ # See https://bugs.launchpad.net/lxml/+bug/2110068
+ if [[ ${AIRFLOW_INSTALLATION_METHOD=} == "." && -f "./pyproject.toml"
]]; then
# for uv only install dev group when we install from sources
- export EXTRA_INSTALL_FLAGS="--group=dev"
+ export EXTRA_INSTALL_FLAGS="--group=dev --no-binary lxml
--no-binary xmlsec"
else
- export EXTRA_INSTALL_FLAGS=""
+ export EXTRA_INSTALL_FLAGS="--no-binary lxml --no-binary xmlsec"
fi
export EXTRA_UNINSTALL_FLAGS=""
export UPGRADE_TO_HIGHEST_RESOLUTION="--upgrade --resolution highest"
@@ -628,8 +631,12 @@ function install_from_sources() {
echo
echo "${COLOR_BLUE}Attempting to upgrade all packages to highest
versions.${COLOR_RESET}"
echo
+ # --no-binary is needed in order to avoid libxml and xmlsec using
different version of libxml2
+ # (binary lxml embeds its own libxml2, while xmlsec uses system one).
+ # See https://bugs.launchpad.net/lxml/+bug/2110068
set -x
- uv sync --all-packages --resolution highest --group dev --group docs
--group docs-gen --group leveldb ${extra_sync_flags}
+ uv sync --all-packages --resolution highest --group dev --group docs
--group docs-gen \
+ --group leveldb ${extra_sync_flags} --no-binary-package lxml
--no-binary-package xmlsec
else
# We only use uv here but Installing using constraints is not
supported with `uv sync`, so we
# do not use ``uv sync`` because we are not committing and using
uv.lock yet.
@@ -686,8 +693,12 @@ function install_from_sources() {
echo
echo "${COLOR_BLUE}Falling back to no-constraints
installation.${COLOR_RESET}"
echo
+ # --no-binary is needed in order to avoid libxml and xmlsec using
different version of libxml2
+ # (binary lxml embeds its own libxml2, while xmlsec uses system
one).
+ # See https://bugs.launchpad.net/lxml/+bug/2110068
set -x
- uv sync --all-packages --group dev --group docs --group docs-gen
--group leveldb ${extra_sync_flags}
+ uv sync --all-packages --group dev --group docs --group docs-gen \
+ --group leveldb ${extra_sync_flags} --no-binary-package lxml
--no-binary-packag xmlsec
set +x
fi
fi
@@ -1125,13 +1136,19 @@ function check_force_lowest_dependencies() {
exit 0
fi
cd "${AIRFLOW_SOURCES}/providers/${provider_id/.//}" || exit 1
- uv sync --resolution lowest-direct
+ # --no-binary is needed in order to avoid libxml and xmlsec using
different version of libxml2
+ # (binary lxml embeds its own libxml2, while xmlsec uses system one).
+ # See https://bugs.launchpad.net/lxml/+bug/2110068
+ uv sync --resolution lowest-direct --no-binary-package lxml
--no-binary-package xmlsec
else
echo
echo "${COLOR_BLUE}Forcing dependencies to lowest versions for
Airflow.${COLOR_RESET}"
echo
cd "${AIRFLOW_SOURCES}/airflow-core"
- uv sync --resolution lowest-direct
+ # --no-binary is needed in order to avoid libxml and xmlsec using
different version of libxml2
+ # (binary lxml embeds its own libxml2, while xmlsec uses system one).
+ # See https://bugs.launchpad.net/lxml/+bug/2110068
+ uv sync --resolution lowest-direct --no-binary-package lxml
--no-binary-package xmlsec
fi
}
diff --git a/scripts/docker/common.sh b/scripts/docker/common.sh
index 4568aa2183b..259ac7a76ec 100644
--- a/scripts/docker/common.sh
+++ b/scripts/docker/common.sh
@@ -42,11 +42,14 @@ function common::get_packaging_tool() {
echo
export PACKAGING_TOOL="uv"
export PACKAGING_TOOL_CMD="uv pip"
- if [[ ${AIRFLOW_INSTALLATION_METHOD=} == "." && -f "./pyproject.toml"
]]; then
+ # --no-binary is needed in order to avoid libxml and xmlsec using
different version of libxml2
+ # (binary lxml embeds its own libxml2, while xmlsec uses system one).
+ # See https://bugs.launchpad.net/lxml/+bug/2110068
+ if [[ ${AIRFLOW_INSTALLATION_METHOD=} == "." && -f "./pyproject.toml"
]]; then
# for uv only install dev group when we install from sources
- export EXTRA_INSTALL_FLAGS="--group=dev"
+ export EXTRA_INSTALL_FLAGS="--group=dev --no-binary lxml
--no-binary xmlsec"
else
- export EXTRA_INSTALL_FLAGS=""
+ export EXTRA_INSTALL_FLAGS="--no-binary lxml --no-binary xmlsec"
fi
export EXTRA_UNINSTALL_FLAGS=""
export UPGRADE_TO_HIGHEST_RESOLUTION="--upgrade --resolution highest"
diff --git a/scripts/docker/entrypoint_ci.sh b/scripts/docker/entrypoint_ci.sh
index e62e0a58c80..b8a4e994ceb 100755
--- a/scripts/docker/entrypoint_ci.sh
+++ b/scripts/docker/entrypoint_ci.sh
@@ -336,13 +336,19 @@ function check_force_lowest_dependencies() {
exit 0
fi
cd "${AIRFLOW_SOURCES}/providers/${provider_id/.//}" || exit 1
- uv sync --resolution lowest-direct
+ # --no-binary is needed in order to avoid libxml and xmlsec using
different version of libxml2
+ # (binary lxml embeds its own libxml2, while xmlsec uses system one).
+ # See https://bugs.launchpad.net/lxml/+bug/2110068
+ uv sync --resolution lowest-direct --no-binary-package lxml
--no-binary-package xmlsec
else
echo
echo "${COLOR_BLUE}Forcing dependencies to lowest versions for
Airflow.${COLOR_RESET}"
echo
cd "${AIRFLOW_SOURCES}/airflow-core"
- uv sync --resolution lowest-direct
+ # --no-binary is needed in order to avoid libxml and xmlsec using
different version of libxml2
+ # (binary lxml embeds its own libxml2, while xmlsec uses system one).
+ # See https://bugs.launchpad.net/lxml/+bug/2110068
+ uv sync --resolution lowest-direct --no-binary-package lxml
--no-binary-package xmlsec
fi
}
diff --git a/scripts/docker/install_airflow_when_building_images.sh
b/scripts/docker/install_airflow_when_building_images.sh
index 3291a6b4cc0..78ddc7eaf85 100644
--- a/scripts/docker/install_airflow_when_building_images.sh
+++ b/scripts/docker/install_airflow_when_building_images.sh
@@ -56,8 +56,12 @@ function install_from_sources() {
echo
echo "${COLOR_BLUE}Attempting to upgrade all packages to highest
versions.${COLOR_RESET}"
echo
+ # --no-binary is needed in order to avoid libxml and xmlsec using
different version of libxml2
+ # (binary lxml embeds its own libxml2, while xmlsec uses system one).
+ # See https://bugs.launchpad.net/lxml/+bug/2110068
set -x
- uv sync --all-packages --resolution highest --group dev --group docs
--group docs-gen --group leveldb ${extra_sync_flags}
+ uv sync --all-packages --resolution highest --group dev --group docs
--group docs-gen \
+ --group leveldb ${extra_sync_flags} --no-binary-package lxml
--no-binary-package xmlsec
else
# We only use uv here but Installing using constraints is not
supported with `uv sync`, so we
# do not use ``uv sync`` because we are not committing and using
uv.lock yet.
@@ -114,8 +118,12 @@ function install_from_sources() {
echo
echo "${COLOR_BLUE}Falling back to no-constraints
installation.${COLOR_RESET}"
echo
+ # --no-binary is needed in order to avoid libxml and xmlsec using
different version of libxml2
+ # (binary lxml embeds its own libxml2, while xmlsec uses system
one).
+ # See https://bugs.launchpad.net/lxml/+bug/2110068
set -x
- uv sync --all-packages --group dev --group docs --group docs-gen
--group leveldb ${extra_sync_flags}
+ uv sync --all-packages --group dev --group docs --group docs-gen \
+ --group leveldb ${extra_sync_flags} --no-binary-package lxml
--no-binary-packag xmlsec
set +x
fi
fi