Python 命令'/bin/sh-c pip安装-r requirements.txt';返回了一个非零代码:1

Python 命令'/bin/sh-c pip安装-r requirements.txt';返回了一个非零代码:1,python,docker,pip,dockerfile,Python,Docker,Pip,Dockerfile,尝试使用Dockerfile构建docker映像时,它会逐层正确执行,但一旦达到pip要求层,就会出现回溯错误。搜索后发现设置环境路径可以解决问题,但仍然会产生相同的错误 在Ubuntu16.04和18.04中尝试了同样的方法,效果很好。但是当尝试在Ubuntu16.04和18.04中创建映像时(lamb)面临这个问题。 在虚拟机中运行ubuntu服务器操作系统 Dockerfile: FROM ubuntu:16.04 FROM python:2 RUN mkdir /app WORKD

尝试使用Dockerfile构建docker映像时,它会逐层正确执行,但一旦达到pip要求层,就会出现回溯错误。搜索后发现设置环境路径可以解决问题,但仍然会产生相同的错误

在Ubuntu16.04和18.04中尝试了同样的方法,效果很好。但是当尝试在Ubuntu16.04和18.04中创建映像时(lamb)面临这个问题。 在虚拟机中运行ubuntu服务器操作系统

Dockerfile:

FROM ubuntu:16.04
 FROM python:2
 RUN mkdir /app
 WORKDIR /app
 RUN apt-get update
 RUN apt-get install -y swig
 RUN apt-get install -y python-dev
 RUN apt-get install -y libssl-dev
 COPY . /app/
 RUN export PYTHONPATH=/usr/bin/python
 RUN pip install -r requirements.txt
 CMD ["python", "manage.py", "runserver", "0.0.0.0:5000"]
Step 1/13 : FROM ubuntu:16.04
  ---> a06c3a7d3393
 Step 2/13 : FROM python:2.7-slim
  ---> e1e8909cd647
 Step 3/13 : WORKDIR /app
 ---> Using cache
 ---> 90810681a80b
Step 4/13 : RUN apt-get update
 ---> Using cache
 ---> 6d4bb0a65e78
Step 5/13 : RUN apt-get install -y swig
 ---> Using cache
 ---> e58beadc9492
Step 6/13 : RUN apt-get install -y python-dev
 ---> Using cache
 ---> 87eb4aa77601
Step 7/13 : RUN apt-get install -y libssl-dev
 ---> Using cache
 ---> ed7cd728dce6
Step 8/13 : COPY . /app
 ---> 991b213ee62a
Step 9/13 : ENV PYTHONPATH "${PYTHONPATH}:/usr/bin/python"
 ---> Running in 2a52a53a2190
Removing intermediate container 2a52a53a2190
 ---> 21a5000cb6cc
Step 10/13 : RUN pip install -r requirements.txt
 ---> Running in 7fa6749748ca
Traceback (most recent call last):
  File "/usr/local/bin/pip", line 6, in <module>
from pip._internal import main
  File "/usr/local/lib/python2.7/site-packages/pip/_internal/__init__.py", line 5, in <module>
import logging
  File "/usr/local/lib/python2.7/logging/__init__.py", line 26, in <module>
import sys, os, time, cStringIO, traceback, warnings, weakref, collections
  File "/usr/local/lib/python2.7/weakref.py", line 14, in <module>
from _weakref import (
ImportError cannot import name _remove_dead_weakref
The command '/bin/sh -c pip install -r requirements1.txt' returned a non-zero code: 1
构建码头工人形象:

FROM ubuntu:16.04
 FROM python:2
 RUN mkdir /app
 WORKDIR /app
 RUN apt-get update
 RUN apt-get install -y swig
 RUN apt-get install -y python-dev
 RUN apt-get install -y libssl-dev
 COPY . /app/
 RUN export PYTHONPATH=/usr/bin/python
 RUN pip install -r requirements.txt
 CMD ["python", "manage.py", "runserver", "0.0.0.0:5000"]
Step 1/13 : FROM ubuntu:16.04
  ---> a06c3a7d3393
 Step 2/13 : FROM python:2.7-slim
  ---> e1e8909cd647
 Step 3/13 : WORKDIR /app
 ---> Using cache
 ---> 90810681a80b
Step 4/13 : RUN apt-get update
 ---> Using cache
 ---> 6d4bb0a65e78
Step 5/13 : RUN apt-get install -y swig
 ---> Using cache
 ---> e58beadc9492
Step 6/13 : RUN apt-get install -y python-dev
 ---> Using cache
 ---> 87eb4aa77601
Step 7/13 : RUN apt-get install -y libssl-dev
 ---> Using cache
 ---> ed7cd728dce6
Step 8/13 : COPY . /app
 ---> 991b213ee62a
Step 9/13 : ENV PYTHONPATH "${PYTHONPATH}:/usr/bin/python"
 ---> Running in 2a52a53a2190
Removing intermediate container 2a52a53a2190
 ---> 21a5000cb6cc
Step 10/13 : RUN pip install -r requirements.txt
 ---> Running in 7fa6749748ca
Traceback (most recent call last):
  File "/usr/local/bin/pip", line 6, in <module>
from pip._internal import main
  File "/usr/local/lib/python2.7/site-packages/pip/_internal/__init__.py", line 5, in <module>
import logging
  File "/usr/local/lib/python2.7/logging/__init__.py", line 26, in <module>
import sys, os, time, cStringIO, traceback, warnings, weakref, collections
  File "/usr/local/lib/python2.7/weakref.py", line 14, in <module>
from _weakref import (
ImportError cannot import name _remove_dead_weakref
The command '/bin/sh -c pip install -r requirements1.txt' returned a non-zero code: 1
步骤1/13:来自ubuntu:16.04
--->a06c3a7d3393
步骤2/13:来自python:2.7-slim
--->e1e8909cd647
步骤3/13:WORKDIR/app
--->使用缓存
--->90810681a80b
步骤4/13:运行apt获取更新
--->使用缓存
--->6d4bb0a65e78
步骤5/13:运行apt get install-y swig
--->使用缓存
--->e58beadc9492
步骤6/13:运行apt-get-install-y python-dev
--->使用缓存
--->87eb4aa77601
步骤7/13:运行apt get安装-y libssl dev
--->使用缓存
--->ed7cd728dce6
步骤8/13:复制/应用程序
--->991b213ee62a
步骤9/13:ENV PYTHONPATH“${PYTHONPATH}:/usr/bin/python”
--->在2A523A2190中运行
拆卸中间容器2A523A2190
--->21a5000cb6cc
步骤10/13:运行pip安装-r requirements.txt
--->在7fa6749748ca中运行
回溯(最近一次呼叫最后一次):
文件“/usr/local/bin/pip”,第6行,在
来自pip.\u内部导入总管
文件“/usr/local/lib/python2.7/site packages/pip/_internal/_init__.py”,第5行,在
导入日志记录
文件“/usr/local/lib/python2.7/logging/_init__uuu.py”,第26行,在
导入系统、操作系统、时间、cStringIO、回溯、警告、weakref、集合
文件“/usr/local/lib/python2.7/weakref.py”,第14行,在
来自(u weakref import)(
ImportError无法导入名称\u删除\u死亡\u weakref
命令'/bin/sh-cpip install-r requirements1.txt'返回一个非零代码:1

不要将每个shell命令放在单独的运行中。这会导致它们在单独的shell中运行,并且来自早期shell的环境变量不会影响后续shell,因为每个进程都有自己的环境

RUN export PYTHONPATH=/usr/bin/python \
 && pip install -r requirements.txt
或者,您可以使用临时赋值语法设置变量并在一个命令中调用pip:

RUN PYTHONPATH=/usr/bin/python pip install -r requirements.txt
Split RUN语句会创建不必要的额外层,从而导致图像过大。Dockerfiles中的标准做法是将相关的运行合并到一个带有反斜杠的大型命令中。使用apt get,最好也这样做,以免它们成为层的一部分

RUN apt-get update \
 && apt-get install -y \
        swig \
        python-dev \
        libssl-dev \
 && rm -rf /var/lib/apt/lists/*
顺便说一句,FROM行不合并。当你写两行时,第二行赢,第一行被忽略

FROM ubuntu:16.04
FROM python:2
来自ubuntu:16.04的

来自python:2
您可能认为需要选择一个操作系统并在顶部添加python,但Docker映像不是这样工作的。python:2映像下面已经有一个操作系统层。请记住,Docker映像是自包含的捆绑包。当您拉入python:2时,您不仅可以得到python解释器,还可以得到它的所有依赖项

  • 从buildpack deps:stretch获得
  • 从buildpack deps:stretch scm获得
  • 从buildpack deps:stretch curl获得
  • 来自debian:stretch的

啊,就是这样。Debian是最终的基本映像。

不要将每个shell命令放在单独的运行中。它会使它们在单独的shell中运行,并且来自早期shell的环境变量不会影响后续shell,因为每个进程都有自己的环境

RUN export PYTHONPATH=/usr/bin/python \
 && pip install -r requirements.txt
或者,您可以使用临时赋值语法设置变量并在一个命令中调用pip:

RUN PYTHONPATH=/usr/bin/python pip install -r requirements.txt
Split RUN语句会创建不必要的额外层,从而导致图像过大。Dockerfiles中的标准做法是将相关的运行合并到一个带有反斜杠的大型命令中。使用apt get,最好也这样做,以免它们成为层的一部分

RUN apt-get update \
 && apt-get install -y \
        swig \
        python-dev \
        libssl-dev \
 && rm -rf /var/lib/apt/lists/*
顺便说一句,FROM行不合并。当你写两行时,第二行赢,第一行被忽略

FROM ubuntu:16.04
FROM python:2
来自ubuntu:16.04的

来自python:2
您可能认为需要选择一个操作系统并在顶部添加python,但Docker映像不是这样工作的。python:2映像下面已经有一个操作系统层。请记住,Docker映像是自包含的捆绑包。当您拉入python:2时,您不仅可以得到python解释器,还可以得到它的所有依赖项

  • 从buildpack deps:stretch获得
  • 从buildpack deps:stretch scm获得
  • 从buildpack deps:stretch curl获得
  • 来自debian:stretch的

啊,就是这样。Debian是最终的基础映像。

这不是docker问题,这是python导入问题,我会修改您的标记可能的副本,尤其是查看答案。我怀疑您的Dockerfile复制了整个virtualenv,您不应该这样做-virtualenv不可移植。谢谢,但所有解决方案都不起作用。这不是文档ker问题这是一个python导入问题,我会修改您的标记可能的副本,尤其是查看答案。我怀疑您的Dockerfile复制了整个virtualenv,这是您不应该做的-virtualenv不可移植。谢谢,但所有解决方案都不起作用。