在Dockerfile上运行安装python包

在Dockerfile上运行安装python包,python,docker,dockerfile,balena,Python,Docker,Dockerfile,Balena,我是Docker新手,目前正在尝试通过安装python包及其库来创建Dockerfile,如下所示: FROM balenalib/fincm3-debian-python:latest # RUN install_packages git RUN apt-get update && apt-get install python \ && apt-get install pip3 \ apt-get install libport

我是Docker新手,目前正在尝试通过安装python包及其库来创建Dockerfile,如下所示:

FROM balenalib/fincm3-debian-python:latest

# RUN install_packages git
RUN apt-get update && apt-get install python \
        && apt-get install pip3 \
        apt-get install libportaudio0 libportaudio2 libportaudiocpp0 portaudio19-dev \
        pip3 install pyaudio \
        pip3 install numpy \
        pip3 install matplotlib \
        pip3 install scipy \
        pip3 install librosa \

# Set our working directory
WORKDIR /usr/src/app

COPY Recorder.py /usr/src/app

# Recorder.py will run when container starts up on the device
CMD ["python","/usr/src/app/Recorder.py"]
但是,当我尝试推送此Dockerfile时,错误是由

    Error: The command '/bin/sh -c apt-get update && apt-get install python          && apt-get install pip3         apt-get install libportaudio0 libportaudio2 libportaudiocpp0 portaudio19-dev            pip3 install pyaudio
pip3 install numpy              pip3 install matplotlib                 pip3 install scipy              pip3 install librosa WORKDIR /usr/src/app' returned a non-zero code: 100

在requirements.txt中移动python包并安装python3 pip与python:3基本映像配合使用

# RUN install_packages git
  RUN apt-get update \
   && apt-get install -y python \
   && apt-get install -y python3-pip

  RUN pip install -r requirements.txt

您正在寻找的包名为
python3pip

接下来,您需要
&&
(用于分隔命令)和
\
(用于继续命令行)。总之,这应该是:

FROM balenalib/fincm3-debian-python:latest

RUN apt-get update && apt-get install python && \
        apt-get install -y \
              python3-pip libportaudio0 libportaudio2 libportaudiocpp0 \
              portaudio19-dev && \
        pip3 install pyaudio numpy matplotlib \
             scipy librosa 

# Set our working directory
WORKDIR /usr/src/app

COPY Recorder.py /usr/src/app

# Recorder.py will run when container starts up on the device
CMD ["python","/usr/src/app/Recorder.py"]

我相信您在这个Dockerfile中有不止一个问题,当您将所有命令与
&&和\
放在一起时,您不知道是哪个命令触发了错误。我建议出于调试目的拆分它们,当它们都工作时,您可以将它们放在一起。一旦您了解了每个错误,就更容易检查和解决它们。这个问题提供了有价值的信息:

试试这个:

1-包是触发器Y/n问题,给出-Y以保证通过

2-使用反斜杠引用新命令时,应使用&,反斜杠引用换行符,可以使用\然后&&

3-
pip3
libportaudio0
包不存在

E: Unable to locate package libportaudio0
我发现了这样分割Dockerfile并删除上面提到的问题的错误

RUN apt-get update 
RUN apt-get install python -y\
        && apt-get install python3-pip -y
RUN apt-get install libportaudio2 libportaudiocpp0 portaudio19-dev -y 
RUN pip3 install pyaudio numpy matplotlib \
             scipy librosa

如果要将这些命令放在一起:

RUN apt-get update \
        && apt-get install python -y \
        && apt-get install python3-pip -y \
        && apt-get install libportaudio2 libportaudiocpp0 portaudio19-dev -y \
        && pip3 install pyaudio numpy matplotlib \
             scipy librosa

我还建议添加一个pip需求文件,这样会使事情更干净。

删除
pip3 install librosa
末尾的\将反斜杠替换为
&&
或仅
。顺便说一句,pip和apt同时接受多个软件包。@Shiva删除\
RUN apt get update&&apt get install python pip3 libportaudio libportaudio libportaudio libportaudio pp0 portaudio 19 dev&&pip3 install pyaudio numpy matplotlib scipy librosa仍然存在错误,
仍显示错误,无法找到程序包pip3
新错误是使用/tmp/pip-install-ab05rxvn/pyaudio/`
[main]中的`Command“python setup.py egg_info”失败并生成的,错误代码为1命令“/bin/sh-c apt get update&&apt get install python&&apt get install-y python3 pip libportaudio0 libportaudio2 libportaudio pp0 portaudio19 dev&&pip3 install pyaudio numpy matplotlib scipy librosa”返回一个非零代码:1
。。。在/tmp/…../pyaudio中。因此,pyaudio的pip安装失败。事实上,如果我尝试在同样失败的RasPi(Debian Buster)上从命令行安装
pip3 install pyaudio
。但是,有一个包
python3-pyaudio
。我建议您安装它(使用apt get)。还有更多的包,例如
python3numpy
python3matplotlib
。一般来说,我更喜欢使用发行版中的预编译包,而不是由pip手动安装。无论如何,@Bernardo的回答包含了一个关于如何调试此类问题的好建议。OP提到了
libportaudio0 libportaudio2 libportaudiocp0 portaudio19 dev
,它们都存在<代码>libaudio0
未被提及。@AdrianW在操作代码中试图安装
libportaudio0
,但该操作不存在,或者由于我正在debian上尝试此操作而出现意外情况。我在答案上打错了
libaudio0
。但也许OP想要libaudio0而不是libportaudio0?这是我回答的主要思想,先解耦以了解您的错误感谢您的解释@Bernardostarnsreesen,我认为错误仍在
pip3
中。错误消息仍然是警报
命令“python setup.py egg_info”失败,错误代码为/tmp/pip install xtrlkujj/pyaudio/
@夏思阳 , 您使用的是什么debian版本?我以前使用“FROM debian”运行的代码运行正常,安装了pyaudio@夏思阳 像这样用pip安装
pyaudio
将尝试编译一些东西。当我尝试它时,它丢失了一个文件
portaudio.h
。虽然这可以通过安装
…-dev
包来解决,但我还是建议从发行版安装预编译包
python3-pyaudio