Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/windows/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 3.x 我可以在ubuntu 18.04中安装Python3.7而不在系统中安装Python3.6吗?_Python 3.x_Docker_Ubuntu_Pip - Fatal编程技术网

Python 3.x 我可以在ubuntu 18.04中安装Python3.7而不在系统中安装Python3.6吗?

Python 3.x 我可以在ubuntu 18.04中安装Python3.7而不在系统中安装Python3.6吗?,python-3.x,docker,ubuntu,pip,Python 3.x,Docker,Ubuntu,Pip,请仔细阅读问题,然后作为副本结束,我相信用例是独一无二的 我试图创建一个docker映像,只安装了Python3.7,问题是如果我试图安装pip,该命令还会安装Python3.6,我不想安装它 我正在修补的理想docker文件的相关部分如下 FROM ubuntu:18.04 # Upgrade installed packages RUN apt-get update && apt-get upgrade -y && apt-get clean # (...

请仔细阅读问题,然后作为副本结束,我相信用例是独一无二的

我试图创建一个docker映像,只安装了Python3.7,问题是如果我试图安装pip,该命令还会安装Python3.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似乎不存在;只有python3pip可以这样做,出于某种原因,这就是安装python3.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'
回溯(最近一次呼叫最后一次):
文件“get pip.py”,第21492行,在
main()
文件“getpip.py”,第197行,在main中
引导(tmpdir=tmpdir)
bootstrap中第82行的文件“get pip.py”
导入pip.\u内部
文件“/tmp/tmpbez2vju9/pip.zip/pip/_-internal/_-init__uuuu.py”,第40行,在
文件“/tmp/tmpbez2vju9/pip.zip/pip/_internal/cli/autocompletion.py”,第8行,在
文件“/tmp/tmpbez2vju9/pip.zip/pip/_internal/cli/main_parser.py”,第8行,在
文件“/tmp/tmpbez2vju9/pip.zip/pip/_internal/cli/cmdoptions.py”,第14行,在
ModuleNotFoundError:没有名为'distutils.util'的模块
同样,安装python3 distutils会导致系统中出现python3.6

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

我看到两种选择:

  • 使用Ubuntu映像,让系统中的Python保持不变。安装pyenv(),然后下载一个与系统的python完全分离的Python3.7安装
  • 使用标有3.7.3-stretch或3.7.3-slim-stretch(Debian)的官方Python图像

  • 如果您的唯一需求是python3.7,而底层操作系统的版本并不困扰您,那么您应该选择从官方python3.7映像创建映像。 来自python:3.7的
    
    
    然后从requirements.txt安装所需的软件包,以防其他人同意安装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的解决方案有两个微妙的问题:

  • 它将只安装过时的Python版本3.7.5。您需要repo
    ppa:deadsnakes
    才能获得更新版本
  • 通过为
    python
    安装替代品,它打破了将
    python
    用于python2.x的惯例。这可能会出错,明白吗
  • 没有这些问题的解决方案是:

    FROM ubuntu:18.04
    
    # Upgrade installed packages
    RUN apt update && apt upgrade -y && apt clean
    
    # install python 3.7.10 (or newer)
    RUN apt update && \
        apt install --no-install-recommends -y build-essential software-properties-common && \
        add-apt-repository -y ppa:deadsnakes/ppa && \
        apt install --no-install-recommends -y python3.7 python3.7-dev python3.7-distutils && \
        apt clean && rm -rf /var/lib/apt/lists/*
    
    # Register the version in alternatives (and set higher priority to 3.7)
    RUN update-alternatives --install /usr/bin/python3 python3 /usr/bin/python3.6 1
    RUN update-alternatives --install /usr/bin/python3 python3 /usr/bin/python3.7 2
    
    # Upgrade pip to latest version
    RUN curl -s https://bootstrap.pypa.io/get-pip.py -o get-pip.py && \
        python3 get-pip.py --force-reinstall && \
        rm get-pip.py
    

    我发现这个人和我有同样的问题,但他们似乎对此没有问题(不像我):不要对python 3使用
    python
    。否则你可能会犯错误,明白吗。最好是
    运行更新替代方案--安装/usr/bin/python3-python3/usr/bin/python3.7 1
    并将
    python
    替换为
    python3