gpt4 book ai didi

python - 命令 '/bin/sh -c pip install -r requirements.txt' 返回非零代码 : 1

转载 作者:行者123 更新时间:2023-12-05 06:26:24 25 4
gpt4 key购买 nike

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

在 ubuntu 16.04 和 18.04 中尝试过同样的工作正常。但是当尝试在 ubuntu 服务器 (lamb) 中创建图像时面临这个问题。在 Virtual Box 中运行 ubuntu 服务器操作系统。

Docker 文件:

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"]

构建 Docker 镜像:

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

最佳答案

不要将每个 shell 命令放在单独的 RUN 中。它使它们在单独的 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 中的标准做法是将相关的 RUN 合并到一个带有反斜杠的大命令中。使用apt-get,最好也erase apt's cache files at the end所以它们不会成为图层的一部分。

RUN apt-get update \
&& apt-get install -y \
swig \
python-dev \
libssl-dev \
&& rm -rf /var/lib/apt/lists/*

顺便说一下,FROM 行不会合并。当您写入其中两个时,第二个获胜,第一个被忽略。

<del>FROM ubuntu:16.04</del>
FROM python:2

您可能认为您需要选择一个操作系统并在上面添加 python,但这不是 Docker 镜像的工作方式。 python:2 图像下面已经有一个操作系统层。请记住,Docker 镜像是独立的包。当您引入 python:2 时,您不仅会得到 Python 解释器,还会得到它的所有依赖项

啊,原来如此。 Debian 是最终的基础镜像。

关于python - 命令 '/bin/sh -c pip install -r requirements.txt' 返回非零代码 : 1,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56146329/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com