【发布时间】:2021-01-04 06:15:56
【问题描述】:
我正在尝试更新现有的 Dockerfile 以从 python3.5 切换到 python3.8,之前它正在为 python3.5 和 pip3 创建符号链接,如下所示:
RUN ln -s /usr/bin/pip3 /usr/bin/pip
RUN ln -s /usr/bin/python3 /usr/bin/python
我已更新 Dockerfile 以从 deadsnakes:ppa 安装 python3.8
apt-get install python3-pip python3.8-dev python3.8-distutils python3.8-venv
如果我删除 python3-pip,它会抱怨 gcc
此系统上未安装 C 编译器或 Python 头文件。尝试运行:sudo apt-get install gcc python3-dev
有了这些安装,我正在尝试更新现有的符号链接创建,如下所示:
RUN ln -s /usr/bin/pip3 /usr/local/lib/python3.8/dist-packages/pip
RUN ln -s /usr/bin/pip /usr/local/lib/python3.8/dist-packages/pip
RUN ln -s /usr/bin/python3.8 /usr/bin/python3
它失败了,说
ln: 未能创建符号链接 '/usr/bin/python3': 文件存在
我认为失败是因为python3 指向python3.6。
如果我尝试:RUN ln -s /usr/bin/python3.8 /usr/bin/python 它不会抱怨符号链接和图像构建成功,但在稍后安装要求时失败(我们使用 Makefile 目标使用 pip 和 pip-sync 在容器内安装依赖项):
错误:无法卸载“python-apt”。这是一个 distutils 安装的项目,因此我们无法准确确定哪些文件属于它,这只会导致部分卸载。
我认为这是因为python-apt 是作为默认python3.6 安装的一部分安装的,而python3.8 pip 无法卸载它。
PS:我的 Dockerfile 镜像基于 Ubunut 18.04,默认带有 python3.6。
如何正确地将 Dockerfile / 图像从 python3.5 切换到 python3.8?所以我以后可以直接使用pip,它指向python3.8的pip
【问题讨论】:
标签: python docker pip dockerfile python-3.8