Docker中Python 3.11的Pip安装

tpgth1q7  于 2023-05-28  发布在  Docker
关注(0)|答案(3)|浏览(374)

我有Dockerfile来为Django项目构建图像,该项目使用Python 3.11并在诗歌环境中运行(请参阅下面的内容)。问题是,当我尝试下载get-pip.py文件并使用Python运行它时,它说没有这样的文件或目录,但它应该在Dockerfile所在的同一个目录中。我不知道,但为什么不在那里?
P.S.我使用的是WSL 2(Ubuntu 20.04)的docker desktop,Dockerfile在project目录下(poetry.lockpyproject.toml文件所在的目录),/website是django project所在的目录。

# Download image of Ubuntu 20.04
FROM ubuntu:20.04

# To prevent interactive dialogs
ENV TZ=Europe \
    DEBIAN_FRONTEND=noninteractive

# Update and install necessary packages
RUN apt-get update \
# Install necessary packages to allow compilation of source code
    && apt-get install -y --no-install-recommends \
    tzdata \
    build-essential \
    checkinstall \
    libreadline-gplv2-dev \
    libncursesw5-dev \
    libssl-dev \
    libsqlite3-dev \
    tk-dev \
    libgdbm-dev \
    libc6-dev \
    libbz2-dev \
    software-properties-common \
# Install python 3.11
    && apt-get update \
    && add-apt-repository ppa:deadsnakes/ppa \
    && apt-get install -y --no-install-recommends \
    python3.11

# Install pip for Python 3.11
RUN curl -sS -O https://bootstrap.pypa.io/get-pip.py | python3.11
# THERE'S AN ERROR
RUN python3.11 get-pip.py

# Install poetry
ENV POETRY_VERSION 1.4.2
RUN python3.11 -m pip install "poetry==$POETRY_VERSION"

# Install dependencies
RUN poetry install

# Run poetry env
ENTRYPOINT ["poetry", "shell"]

# Go to website folder
WORKDIR /website

# Run Django server
CMD ["python3.11", "manage.py", "runserver"]
mccptt67

mccptt671#

如果你想把curl输出直接传递给python。不要使用-O参数
-O,--remote-name:将输出写入一个本地文件,该文件的名称与我们获得的远程文件类似。
而不是这些线。

# Install pip for Python 3.11
RUN curl -sS -O https://bootstrap.pypa.io/get-pip.py | python3.11
# THERE'S AN ERROR
RUN python3.11 get-pip.py

你就写吧

# Install pip for Python 3.11
RUN curl -sS https://bootstrap.pypa.io/get-pip.py | python3.11

answer也会帮助你。

更新:先安装curl,然后再运行上述curl命令。

RUN apt-get install -y curl
55ooxyrt

55ooxyrt2#

您使用pipe(|)将其转发到python,因此该文件不会最终位于目录中,而是作为python.311的标准输入。
你有两个选择

  • 通过curl下载它,而不需要进一步的管道传输
  • 像现在一样将其通过管道传输到python中,但之后不必显式执行(RUN python3.11 get-pip.py),因为这是您在上一行通过管道所做的
ctehm74n

ctehm74n3#

而不是下载并运行get-pip.py

python3.11 -m ensurepip
pip install --upgrade pip

参见the docs on ensurepip

相关问题