Skip to main content
 首页 » 编程设计

python之在 `pip` 期间使用 `docker build` 安装 python 模块失败

2024年12月31日26yjmyzz

我正在尝试构建一个 Docker 容器,我想在其中使用 pip 安装一些 Python 模块(最终需要这些模块来构建应用程序)。我编写了以下 Dockerfile:

FROM ubuntu:16.04 
 
RUN echo "===> Adding prerequisites..."   && \ 
    apt update -y            && \ 
    DEBIAN_FRONTEND=noninteractive  \ 
        apt install --no-install-recommends -y -q  \ 
                build-essential                        \ 
                python python-pip python-dev           && \ 
    pip install --upgrade setuptools pip wheel      && \ 
    pip install --upgrade pyyaml 
 
# Default command 
CMD [ "echo", "Hello!" ] 

我在构建时得到以下输出(docker build -t app:0 .):

Sending build context to Docker daemon  10.26MB 
Step 1/3 : FROM ubuntu:16.04 
 ---> 4a689991aa24 
Step 2/3 : RUN echo "===> Adding prerequisites..."   &&     apt update -y            &&     DEBIAN_FRONTEND=noninteractive          apt install --no-install-recommends -y -q                  build-essential                                        python python-pip python-dev           &&     pip install --upgrade setuptools pip wheel      &&     pip install --upgrade pyyaml 
 ---> Running in 9d813b5bc68d 
===> Adding prerequisites... 
 
WARNING: apt does not have a stable CLI interface. Use with caution in scripts. 
 
Get:1 http://archive.ubuntu.com/ubuntu xenial InRelease [247 kB] 
[More apt output, no errors here] 
Get:18 http://archive.ubuntu.com/ubuntu xenial-backports/universe amd64 Packages [8532 B] 
Fetched 15.5 MB in 1s (11.3 MB/s) 
Reading package lists... 
Building dependency tree... 
Reading state information... 
All packages are up to date. 
 
WARNING: apt does not have a stable CLI interface. Use with caution in scripts. 
 
Reading package lists... 
Building dependency tree... 
Reading state information... 
The following additional packages will be installed: 
  binutils bzip2 ca-certificates cpp cpp-5 dpkg-dev g++ g++-5 gcc gcc-5 
  libasan2 libatomic1 libc-dev-bin libc6-dev libcc1-0 libcilkrts5 libdpkg-perl 
  libexpat1 libexpat1-dev libffi6 libgcc-5-dev libgdbm3 libgmp10 libgomp1 
  libisl15 libitm1 liblsan0 libmpc3 libmpfr4 libmpx0 libperl5.22 libpython-dev 
  libpython-stdlib libpython2.7 libpython2.7-dev libpython2.7-minimal 
  libpython2.7-stdlib libquadmath0 libsqlite3-0 libssl1.0.0 libstdc++-5-dev 
  libtsan0 libubsan0 linux-libc-dev make mime-support openssl patch perl 
  perl-modules-5.22 python-minimal python-pip-whl python2.7 python2.7-dev 
  python2.7-minimal xz-utils 
Suggested packages: 
  binutils-doc bzip2-doc cpp-doc gcc-5-locales debian-keyring g++-multilib 
  g++-5-multilib gcc-5-doc libstdc++6-5-dbg gcc-multilib manpages-dev autoconf 
  automake libtool flex bison gdb gcc-doc gcc-5-multilib libgcc1-dbg 
  libgomp1-dbg libitm1-dbg libatomic1-dbg libasan2-dbg liblsan0-dbg 
  libtsan0-dbg libubsan0-dbg libcilkrts5-dbg libmpx0-dbg libquadmath0-dbg 
  glibc-doc libstdc++-5-doc make-doc ed diffutils-doc perl-doc 
  libterm-readline-gnu-perl | libterm-readline-perl-perl python-doc python-tk 
  python2.7-doc binfmt-support 
Recommended packages: 
  fakeroot libalgorithm-merge-perl manpages manpages-dev 
  libfile-fcntllock-perl file netbase rename python-all-dev python-setuptools 
  python-wheel 
The following NEW packages will be installed: 
  binutils build-essential bzip2 ca-certificates cpp cpp-5 dpkg-dev g++ g++-5 
  gcc gcc-5 libasan2 libatomic1 libc-dev-bin libc6-dev libcc1-0 libcilkrts5 
  libdpkg-perl libexpat1 libexpat1-dev libffi6 libgcc-5-dev libgdbm3 libgmp10 
  libgomp1 libisl15 libitm1 liblsan0 libmpc3 libmpfr4 libmpx0 libperl5.22 
  libpython-dev libpython-stdlib libpython2.7 libpython2.7-dev 
  libpython2.7-minimal libpython2.7-stdlib libquadmath0 libsqlite3-0 
  libssl1.0.0 libstdc++-5-dev libtsan0 libubsan0 linux-libc-dev make 
  mime-support openssl patch perl perl-modules-5.22 python python-dev 
  python-minimal python-pip python-pip-whl python2.7 python2.7-dev 
  python2.7-minimal xz-utils 
0 upgraded, 60 newly installed, 0 to remove and 0 not upgraded. 
Need to get 79.5 MB of archives. 
After this operation, 251 MB of additional disk space will be used. 
Get:1 http://archive.ubuntu.com/ubuntu xenial/main amd64 libgdbm3 amd64 1.8.3-13.1 [16.9 kB] 
[More apt output, no errors here] 
Get:60 http://archive.ubuntu.com/ubuntu xenial-updates/universe amd64 python-pip all 8.1.1-2ubuntu0.4 [144 kB] 
debconf: delaying package configuration, since apt-utils is not installed 
Fetched 79.5 MB in 1s (66.0 MB/s) 
Selecting previously unselected package libgdbm3:amd64. 
(Reading database ... 4768 files and directories currently installed.) 
Preparing to unpack .../libgdbm3_1.8.3-13.1_amd64.deb ... 
Unpacking libgdbm3:amd64 (1.8.3-13.1) ... 
[Even more apt output] 
Processing triggers for libc-bin (2.23-0ubuntu10) ... 
Processing triggers for ca-certificates (20170717~16.04.1) ... 
Updating certificates in /etc/ssl/certs... 
148 added, 0 removed; done. 
Running hooks in /etc/ca-certificates/update.d... 
done. 
Collecting setuptools 
  Downloading https://files.pythonhosted.org/packages/96/06/c8ee69628191285ddddffb277bd5abdf769166e7a14b867c2a172f0175b1/setuptools-40.4.3-py2.py3-none-any.whl (569kB) 
Collecting pip 
  Downloading https://files.pythonhosted.org/packages/c2/d7/90f34cb0d83a6c5631cf71dfe64cc1054598c843a92b400e55675cc2ac37/pip-18.1-py2.py3-none-any.whl (1.3MB) 
Collecting wheel 
  Downloading https://files.pythonhosted.org/packages/5a/9b/6aebe9e2636d35d1a93772fa644c828303e1d5d124e8a88f156f42ac4b87/wheel-0.32.2-py2.py3-none-any.whl 
Installing collected packages: setuptools, pip, wheel 
  Found existing installation: pip 8.1.1 
    Not uninstalling pip at /usr/lib/python2.7/dist-packages, outside environment /usr 
Successfully installed pip-18.1 setuptools-40.4.3 wheel-0.32.2 
Traceback (most recent call last): 
  File "/usr/bin/pip", line 9, in <module> 
    from pip import main 
ImportError: cannot import name main 
The command '/bin/sh -c echo "===> Adding prerequisites..."   &&     apt update -y            &&     DEBIAN_FRONTEND=noninteractive          apt install --no-install-recommends -y -q                  build-essential                                        python python-pip python-dev           &&     pip install --upgrade setuptools pip wheel      &&     pip install --upgrade pyyaml' returned a non-zero code: 1 

但是,如果我从 Dockerfile 中删除对 pip 的第二次调用,容器似乎已成功构建。

谁能帮我理解是什么触发了构建错误?非常感谢!

请您参考如下方法:

升级 pip 时这似乎是一个问题,您可以在此处看到:
https://github.com/pypa/pip/issues/5240

而不是运行

pip install --upgrade setuptools pip wheel 

试着改成

python -m pip install --upgrade setuptools pip wheel 

按照建议:

然后将正确构建 docker 镜像。