如何在 docker 容器中将 python2 别名为 python3?

GoM*_*key 4 python-2.7 python-3.x docker

我正在尝试将 docker 容器中的默认 python 设置为 python3 并在 dockerfile 中设置别名。当我打开 .bashrc 文件时,它们会出现。据我所知,它应该可以工作,但默认的 python 版本仍然是 2.7。如果我运行 which python,它仍然会指向 usr/bin/python 而不是 python3。与 pip 相同。谁能告诉我是什么问题?这是我用来别名的命令:

   RUN \
   echo 'alias python="/usr/bin/python3"' >> /root/.bashrc && \
   echo 'alias pip="/usr/bin/pip3"' >> /root/.bashrc

Run Code Online (Sandbox Code Playgroud)

这看起来对吗?我正在使用 ubuntu 17.10

idd*_*dar 14

您尝试为 python bin 创建符号链接

RUN ln -s /usr/bin/python3 /usr/bin/python & \
    ln -s /usr/bin/pip3 /usr/bin/pip
Run Code Online (Sandbox Code Playgroud)

其他选项update-alternatives用于更多访问此站点

sudo update-alternatives --install /usr/bin/python python /usr/bin/python3
Run Code Online (Sandbox Code Playgroud)

另一个选项是在更新后尝试获取 bashrc 文件

RUN \
   echo 'alias python="/usr/bin/python3"' >> /root/.bashrc && \
   echo 'alias pip="/usr/bin/pip3"' >> /root/.bashrc && \
   source /root/.bashrc
Run Code Online (Sandbox Code Playgroud)

我建议在Docker Hub上查看 python 图像的所有选项

提示:使用anacondaconda管理您的python 版本(conda 站点

  • “update-alternatives”行是否缺少“priority”的(强制)值?`--install` 选项似乎要求这样做。例如,值为“1”:“update-alternatives --install /usr/bin/python python /usr/bin/python3 1”对我有用。 (4认同)
  • 可以尝试使用“ln -sf”代替“ln -s”,因为如果已经安装了 python2,这些链接可能存在。 (2认同)

小智 10

上面的答案很好,但应该如下所示:

RUN ln -s /usr/bin/python3 /usr/bin/python && \
    ln -s /usr/bin/pip3 /usr/bin/pip
Run Code Online (Sandbox Code Playgroud)

也许他们写错了,ls它只是列出了目录的内容,而不是使用ln它实际创建符号链接。