【问题标题】:How do I alias python2 to python3 in a docker container?如何在 docker 容器中将 python2 别名为 python3?
【发布时间】:2019-08-16 04:22:35
【问题描述】:

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

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

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

【问题讨论】:

  • 假设 .bashrc 和其他 shell 点文件在 Docker 中不起作用;许多常见的路径根本不运行它们。
  • 即使它们是在 docker 文件中定义的?我知道 ~./ 不起作用,但我定义了一个绝对路径
  • docker run myimage python ... 根本看不到任何 shell 点文件;它将运行/usr/bin/python,它可能是Python 2。(而且任何以#!/usr/bin/env python 开头的脚本在任何情况下都需要Python 2 而不是3。)

标签: python-3.x python-2.7 docker


【解决方案1】:

你尝试为 python bin 创建一个符号链接

RUN ln -s /usr/bin/python3 /usr/bin/python & \
    ln -s /usr/bin/pip3 /usr/bin/pip

其他选项是使用update-alternatives更多访问this site

sudo update-alternatives --install /usr/bin/python python /usr/bin/python3

另一种选择是在更新后尝试获取 bashrc 文件

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

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

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

【讨论】:

  • 可以尝试使用“ln -sf”代替“ln -s”,因为如果已经安装了 python2,这些链接可能存在。
  • update-alternatives 行不是缺少priority 的(强制)值吗? --install 选项似乎要求这样做。例如,1 的值:update-alternatives --install /usr/bin/python python /usr/bin/python3 1 为我工作。
【解决方案2】:

上面的答案很好,除了应该如下:

RUN ln -s /usr/bin/python3 /usr/bin/python && \
    ln -s /usr/bin/pip3 /usr/bin/pip

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

【讨论】:

    猜你喜欢
    • 2016-07-23
    • 1970-01-01
    • 2018-03-09
    • 2022-08-05
    • 2021-07-10
    • 1970-01-01
    • 1970-01-01
    • 2018-05-30
    • 2020-10-11
    相关资源
    最近更新 更多