web-dev-qa-db-fra.com

Puis-je installer python 3.7 dans ubuntu 18.04 sans avoir python 3.6 dans le système)?

Veuillez lire attentivement la question avant de fermer en double, je pense que le cas d'utilisation est unique.

J'essaie de créer une image docker qui seulement a python 3.7 installé, le problème est que si j'essaie d'installer pip, la commande installe également python 3.6 qui je ne veux pas.

La partie pertinente du fichier docker idéal que je bricole est la suivante

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

# (...)

Cela échouerait car python3.7-pip ne semble pas exister; seul python3-pip le fait, ce qui installe python 3.6 pour une raison quelconque).

J'ai essayé de ne pas installer pip du tout et de le faire manuellement, comme ça

# (...)

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

Qui échoue avec cette erreur:

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'

Encore une fois, l'installation de python3-distutils fait apparaître python 3.6 dans le système

Donc, existe-t-il un moyen d'installer UNIQUEMENT un python 3.7 entièrement fonctionnel dans Ubuntu 18.04, SANS avoir à installer python 3.6?

8
juan

Dans le cas où quelqu'un d'autre est d'accord pour installer Python3.6 comme effet secondaire (python3.7-distutils l'introduit comme indiqué par OP). Cela installera Python3.7 en le rendant par défaut et disposera de la dernière pip disponible à l'aide de votre installation python3.7

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


# (...)
5
donhector

Je vois deux choix:

  1. En utilisant une image Ubuntu, laissez le Python du système intact). Installez pyenv ( https://github.com/pyenv/pyenv ), puis téléchargez un python 3.7, complètement séparée de Python du système.

ou

  1. Utilisez l'image officielle Python étiquetée 3.7.3-stretch ou 3.7.3-slim-stretch (Debian)
3
Hildeberto

Si votre seule exigence est de python 3.7 et que la version du système d'exploitation sous-jacent ne vous dérange pas, vous devriez choisir l'option de créer une image à partir de l'image officielle de python3.7. FROM python:3.7 Et puis installez les packages requis à partir de requirements.txt

1
Mousam Singh