我可以在 ubuntu 18.04 中安装 python 3.7 而系统中没有 python 3.6 吗?

新手上路,请多包涵

请在关闭重复之前仔细阅读问题,我相信用例是独一无二的。

我正在尝试创建一个 只安装了 python 3.7 的 docker 镜像,问题是如果我尝试安装 pip,该命令还会安装 我不想要 的 python 3.6。

我正在修补的理想 docker 文件的相关部分如下

FROM ubuntu:18.04

# Upgrade installed packages
RUN apt-get update && apt-get upgrade -y && apt-get clean

# (...)

# Python package management and basic dependencies
RUN apt-get install -y python3.7 python3.7-dev python3.7-pip

# Register the version in alternatives
RUN update-alternatives --install /usr/bin/python python /usr/bin/python3.7 1

# Set python 3 as the default python
RUN update-alternatives --set python /usr/bin/python3.7

# Upgrade pip to latest version
RUN python -m ensurepip --upgrade

# (...)

这将失败,因为 python3.7-pip 似乎不存在;只有 python3-pip 可以,这就是出于某种原因安装 python 3.6 的原因。

我试过根本不安装 pip 而是手动安装,就像这样

# (...)

RUN apt-get install -y python3.7 python3.7-dev

# (...)

RUN curl 'https://bootstrap.pypa.io/get-pip.py' > get-pip.py

RUN python get-pip.py pip --no-setuptools --no-wheel

失败并出现此错误:

 Traceback (most recent call last):
  File "get-pip.py", line 21492, in <module>
    main()
  File "get-pip.py", line 197, in main
    bootstrap(tmpdir=tmpdir)
  File "get-pip.py", line 82, in bootstrap
    import pip._internal
  File "/tmp/tmpbez2vju9/pip.zip/pip/_internal/__init__.py", line 40, in <module>
  File "/tmp/tmpbez2vju9/pip.zip/pip/_internal/cli/autocompletion.py", line 8, in <module>
  File "/tmp/tmpbez2vju9/pip.zip/pip/_internal/cli/main_parser.py", line 8, in <module>
  File "/tmp/tmpbez2vju9/pip.zip/pip/_internal/cli/cmdoptions.py", line 14, in <module>
ModuleNotFoundError: No module named 'distutils.util'

同样,安装 python3-distutils 会导致系统中出现 python 3.6

那么,有没有办法在 ubuntu 18.04 中只安装功能齐全的 python 3.7,而不必安装 python 3.6?

原文由 juan 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 566
2 个回答

我看到两个选择:

  1. 使用 Ubuntu 映像,保持系统中的 Python 不变。安装 pyenv ( https://github.com/pyenv/pyenv ),然后下载 python 3.7 安装,与系统的 Python 完全分离。

或者

  1. 使用标有 3.7.3-stretch 或 3.7.3-slim-stretch (Debian) 的官方 Python 映像

原文由 Hildeberto 发布,翻译遵循 CC BY-SA 4.0 许可协议

如果其他人可以安装 Python3.6 作为副作用(python3.7-distutils 如 OP 所指出的那样引入它)。这将安装 Python3.7,使其成为默认值,并使用您的 python3.7 安装获得最新的可用版本 pip

 FROM ubuntu:18.04

# Upgrade installed packages
RUN apt-get update && apt-get upgrade -y && apt-get clean

# (...)

# Python package management and basic dependencies
RUN apt-get install -y curl python3.7 python3.7-dev python3.7-distutils

# Register the version in alternatives
RUN update-alternatives --install /usr/bin/python python /usr/bin/python3.7 1

# Set python 3 as the default python
RUN update-alternatives --set python /usr/bin/python3.7

# Upgrade pip to latest version
RUN curl -s https://bootstrap.pypa.io/get-pip.py -o get-pip.py && \
    python get-pip.py --force-reinstall && \
    rm get-pip.py

# (...)

原文由 donhector 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题