As a follow up, here's a Dockerfile where I've intentionally recreated the problem you describe, and then show how to get around it if you decided you need to install Python bindings globally with `pip`. <details> <summary>Dockerfile:</summary> ```Dockerfile ARG BASE_IMAGE=gitlab-registry.cern.ch/linuxsupport/cc7-base:latest FROM ${BASE_IMAGE} as base SHELL [ "/bin/bash", "-c" ] RUN yum update -y && \ yum install -y \ cmake3 \ make \ krb5-devel \ libuuid-devel \ libxml2-devel \ openssl-devel \ systemd-devel \ zlib-devel \ devtoolset-7-gcc-c++ \ python3-devel \ python3-setuptools \ git \ cppunit-devel && \ yum clean all && \ python3 -m pip install --no-cache-dir --upgrade pip setuptools wheel RUN yum update -y && \ yum install -y \ xrootd-5.4.1 \ xrootd-client-5.4.1 \ python36-xrootd-5.4.1 && \ yum clean all && \ xrootd -v && \ xrdcp --version && \ python3 -m pip list && \ python3 -m pip show xrootd # 5.4.1 # The following would fail with the error: # # ERROR: Cannot uninstall 'xrootd'. It is a distutils installed project and thus we # cannot accurately determine which files belong to it which would lead to only a # partial uninstall. # # as you're asking pip to try to deal with something it didn't install. # RUN . /opt/rh/devtoolset-7/enable && \ # python3 -m pip install --upgrade --force-reinstall 'xrootd==5.4.2' && \ # xrootd -v && \ # xrdcp --version && \ # python3 -m pip list && \ # python3 -m pip show xrootd # The solution is to uninstall the RPM package and _then_ to install things # A better solution is to not be installing Python packages globally as pip # warns us about: # # WARNING: Running pip as the 'root' user can result in broken permissions and # conflicting behaviour with the system package manager. It is recommended to # use a virtual environment instead: https://pip.pypa.io/warnings/venv # # and to instead either use an automatically activated virtual envrionment or to # use pipx RUN yum remove python36-xrootd -y && \ . /opt/rh/devtoolset-7/enable && \ python3 -m pip --verbose install \ --upgrade \ --force-reinstall \ 'xrootd==5.4.2' && \ xrootd -v && \ xrdcp --version && \ python3 -m pip list && \ python3 -m pip show xrootd && \ python3 -c 'import XRootD; print(XRootD)' && \ python3 -c 'import pyxrootd; print(pyxrootd)' && \ python3 -c 'from XRootD import client; print(client.FileSystem("root://someserver:1094"))' WORKDIR / SHELL [ "/usr/bin/scl", "enable", "devtoolset-7", "/bin/bash", "-c"] ``` </details> the commented out snippet ```Dockerfile RUN . /opt/rh/devtoolset-7/enable && \ python3 -m pip install --upgrade --force-reinstall 'xrootd==5.4.2' && \ ``` snippet fails with your error: ``` ERROR: Cannot uninstall 'xrootd'. It is a distutils installed project and thus we cannot accurately determine which files belong to it which would lead to only a partial uninstall. ``` The part that allows the build to succeed is the bit below where the rpm is first removed to avoid collisions like this that `pip` has no way of being able to solve ```Dockerfile RUN yum remove python36-xrootd -y && \ . /opt/rh/devtoolset-7/enable && \ python3 -m pip --verbose install \ --upgrade \ --force-reinstall \ 'xrootd==5.4.2' && \ ... ``` Does this all make sense? -- Reply to this email directly or view it on GitHub: https://github.com/xrootd/xrootd/issues/1641#issuecomment-1065815888 You are receiving this because you are subscribed to this thread. Message ID: <[log in to unmask]> ######################################################################## Use REPLY-ALL to reply to list To unsubscribe from the XROOTD-DEV list, click the following link: https://listserv.slac.stanford.edu/cgi-bin/wa?SUBED1=XROOTD-DEV&A=1