Aar*_*rif 11 python pip docker dockerfile python-3.8
我试图从更新现有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
Run Code Online (Sandbox Code Playgroud)
我已经更新了Dockerfile安装python3.8从deadsnakes:ppa
apt-get install python3-pip python3.8-dev python3.8-distutils python3.8-venv
Run Code Online (Sandbox Code Playgroud)
如果我删除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
Run Code Online (Sandbox Code Playgroud)
它失败了,说
ln: 未能创建符号链接 '/usr/bin/python3': 文件存在
我认为失败是因为python3指向python3.6. 如果我尝试:RUN ln -s /usr/bin/python3.8 /usr/bin/python它不会抱怨符号链接和图像成功构建,但在稍后安装需求时失败(我们使用 Makefile 目标在容器内使用pipand安装依赖项pip-sync):
错误:无法卸载“python-apt”。这是一个 distutils 安装的项目,因此我们无法准确确定哪些文件属于它,这只会导致部分卸载。
我认为这是因为它是python-apt作为默认python3.6安装的一部分安装的,而python3.8pip 无法卸载它。
PS:我的 Dockerfile 映像基于默认附带的Ubunut 18.04python3.6。
如何正确地将 Dockerfile/图像从 切换python3.5到python3.8?所以我以后可以pip直接使用它指向python3.8'spip
以这种方式替换系统 python 通常不是一个好主意(因为它可以破坏依赖于这些可执行文件的操作系统级程序)——我在这个我制作的视频中稍微回顾了一下“为什么不全局 pip /虚拟环境?”
更好的方法是创建一个前缀并将其放在PATH较早的位置(这允许系统可执行文件继续工作,但裸python/ python3/ 等将使用您的其他可执行文件)
对于似乎您正在使用的死蛇,这样的事情应该有效:
FROM ubuntu:bionic
RUN : \
&& apt-get update \
&& DEBIAN_FRONTEND=noninteractive apt-get install -y --no-install-recommends \
software-properties-common \
&& add-apt-repository -y ppa:deadsnakes \
&& DEBIAN_FRONTEND=noninteractive apt-get install -y --no-install-recommends \
python3.8-venv \
&& apt-get clean \
&& rm -rf /var/lib/apt/lists/* \
&& :
RUN python3.8 -m venv /venv
ENV PATH=/venv/bin:$PATH
Run Code Online (Sandbox Code Playgroud)
该ENV行是这里的关键,它将 virtualenv 放在路径的开头
$ docker build -t test .
...
$ docker run --rm -ti test bash -c 'which python && python --version && which pip && pip --version'
/venv/bin/python
Python 3.8.5
/venv/bin/pip
pip 20.1.1 from /venv/lib/python3.8/site-packages/pip (python 3.8)
Run Code Online (Sandbox Code Playgroud)
免责声明:我是死蛇的维护者
为什么不直接从 ubuntu:18.04 构建一个具有所需配置的新映像呢?像这样:
FROM ubuntu:18.04
RUN apt update && apt install software-properties-common -y
RUN add-apt-repository ppa:deadsnakes/ppa && install python3.8 -y
RUN ln -s /usr/bin/pip3 /usr/bin/pip && \
ln -s /usr/bin/python3.8 /usr/bin/python
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
10181 次 |
| 最近记录: |