tMerge pull request #6843 from SomberNight/202012_distutils_config - electrum - Electrum Bitcoin wallet HTML git clone https://git.parazyd.org/electrum DIR Log DIR Files DIR Refs DIR Submodules --- DIR commit 3c892361282940c1724e60b9a6a4f826503a7a79 DIR parent 587ca5dd42e832db277e0a3d754ad98e71cfbefa HTML Author: ghost43 <somber.night@protonmail.com> Date: Tue, 15 Dec 2020 15:44:39 +0000 Merge pull request #6843 from SomberNight/202012_distutils_config build: don't allow setuptools to sneakily install build-time deps Diffstat: M contrib/build-linux/appimage/build… | 2 ++ M contrib/build-linux/sdist/build.sh | 2 ++ M contrib/build-wine/prepare-wine.sh | 2 ++ M contrib/build_tools_util.sh | 22 ++++++++++++++++++++++ M contrib/osx/make_osx | 2 ++ A setup.cfg | 6 ++++++ 6 files changed, 36 insertions(+), 0 deletions(-) --- DIR diff --git a/contrib/build-linux/appimage/build.sh b/contrib/build-linux/appimage/build.sh t@@ -94,6 +94,8 @@ python='appdir_python' info "installing pip." "$python" -m ensurepip +break_legacy_easy_install + info "preparing electrum-locale." ( DIR diff --git a/contrib/build-linux/sdist/build.sh b/contrib/build-linux/sdist/build.sh t@@ -12,6 +12,8 @@ DISTDIR="$PROJECT_ROOT/dist" # note that at least py3.7 is needed, to have https://bugs.python.org/issue30693 python3 --version || fail "python interpreter not found" +break_legacy_easy_install + # upgrade to modern pip so that it knows the flags we need. # we will then install a pinned version of pip as part of requirements-build-sdist python3 -m pip install --upgrade pip DIR diff --git a/contrib/build-wine/prepare-wine.sh b/contrib/build-wine/prepare-wine.sh t@@ -60,6 +60,8 @@ for msifile in core dev exe lib pip tools; do wine msiexec /i "$PYTHON_DOWNLOADS/${msifile}.msi" /qb TARGETDIR=$PYHOME done +break_legacy_easy_install + info "Installing build dependencies." $PYTHON -m pip install --no-dependencies --no-warn-script-location -r "$CONTRIB"/deterministic-build/requirements-build-wine.txt DIR diff --git a/contrib/build_tools_util.sh b/contrib/build_tools_util.sh t@@ -129,3 +129,25 @@ fi export GCC_STRIP_BINARIES="${GCC_STRIP_BINARIES:-0}" + +function break_legacy_easy_install() { + # We don't want setuptools sneakily installing dependencies, invisible to pip. + # This ensures that if setuptools calls distutils which then calls easy_install, + # easy_install will not download packages over the network. + # see https://pip.pypa.io/en/stable/reference/pip_install/#controlling-setup-requires + # see https://github.com/pypa/setuptools/issues/1916#issuecomment-743350566 + info "Intentionally breaking legacy easy_install." + DISTUTILS_CFG="${HOME}/.pydistutils.cfg" + DISTUTILS_CFG_BAK="${HOME}/.pydistutils.cfg.orig" + # If we are not inside docker, we might be overwriting a config file on the user's system... + if [ -e "$DISTUTILS_CFG" ] && [ ! -e "$DISTUTILS_CFG_BAK" ]; then + warn "Overwriting python distutils config file at '$DISTUTILS_CFG'. A copy will be saved at '$DISTUTILS_CFG_BAK'." + mv "$DISTUTILS_CFG" "$DISTUTILS_CFG_BAK" + fi + cat <<EOF > "$DISTUTILS_CFG" +[easy_install] +index_url = '' +find_links = '' +EOF +} + DIR diff --git a/contrib/osx/make_osx b/contrib/osx/make_osx t@@ -72,6 +72,8 @@ PYTHON_CONFIGURE_OPTS="--enable-framework" pyenv install -s $PYTHON_VERSION && \ pyenv global $PYTHON_VERSION || \ fail "Unable to use Python $PYTHON_VERSION" +break_legacy_easy_install + # create a fresh virtualenv # This helps to avoid older versions of pip-installed dependencies interfering with the build. VENV_DIR="$CONTRIB_OSX/build-venv" DIR diff --git a/setup.cfg b/setup.cfg t@@ -0,0 +1,6 @@ +[easy_install] +# We don't want setuptools sneakily installing dependencies, invisible to pip. +# see https://pip.pypa.io/en/stable/reference/pip_install/#controlling-setup-requires +# see https://github.com/pypa/setuptools/issues/1916#issuecomment-743350566 +index_url = '' +find_links = ''