我正在尝试更新一个现有的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: failed to create symbolic link '/usr/bin/python3': File exists
我认为这是因为 python3
是指向 python3.6
的符号链接。
如果尝试使用 RUN ln -s /usr/bin/python3.8 /usr/bin/python
,不会报错,镜像将成功构建,但稍后在安装要求时会失败(我们使用 Makefile 目标在容器内使用 pip
和 pip-sync
安装依赖项):
ERROR: Cannot uninstall 'python-apt'. It is a distutils installed project and thus we cannot accurately determine which files belong to it which would lead to only a partial uninstall.
我认为这是因为 python-apt
作为默认的 python3.6
安装的一部分被安装,而 python3.8
pip 无法卸载它。
PS:我的 Dockerfile 镜像基于 Ubuntu 18.04,默认情况下带有 python3.6
。
如何正确地将 Dockerfile/镜像从 python3.5
切换到 python3.8
?这样我就可以直接使用 pip
并将其指向 python3.8
的 pip
。
virtualenv
但安装了python3.8
的解决方案,以便进行对系统级别安装的包的调试,但它并不喜欢...... 长话短说,将virtualenv
纳入其中是最好的选择... 再次感谢! - Aarif