Pin python géré par conda

Quand j'ai fait conda install hogehoge, un paquet non planifié (ou python) a été mis à jour et le tout est mort, donc j'écrirai une contre-mesure après un mémorandum.

La fin

Ce que je voulais faire: Je voulais créer ma propre image en ajoutant plusieurs bibliothèques basées sur l'image docker de pytorch.

Ce que j'ai fait: j'ai écrit conda install docilement dans Dockerfile Ce qui s'est passé: La version de python a changé au moment de l'installation de conda, et l'environnement conda a été endommagé et n'a pas pu être utilisé correctement.

Genin: non-concordance entre les versions conda et python Ce que j'avais à faire (Conclusion): écrivez ce que vous voulez corriger dans un fichier appelé épinglé (cette fois résolu avec python == 3.6. *) (Ou incluez le conda qui correspond à la version mise à jour de python; pas fait cette fois; au bas du lien de référence)

référence

Is it possible to lock versions of packages in Anaconda? - Stack Overflow How to pin Conda | Damian's blog Notes sur la modification de la version python de conda --Qiita

Détails de ce que j'ai fait

J'ai écrit le Dockerfile suivant (l'ancienne image originale que j'utilise peut faire partie du problème ...).

FROM pytorch/pytorch:0.4.1-cuda9-cudnn7-devel

RUN apt update && apt upgrade -y

#Ce sera un problème plus tard
# joblib etc
RUN conda install -y \
    joblib \
    matplotlib \
    scikit-learn \
    tqdm

Puis construisez.

$ docker build -t mypytorch .

A ce moment, conda install les affiche comme des packages à mettre à jour (la partie qui posera problème plus tard).

The following packages will be UPDATED:

    ca-certificates:  2018.03.07-0            --> 2020.1.1-0
    certifi:          2018.4.16-py36_0        --> 2019.11.28-py38_0
    freetype:         2.9.1-h8a8886c_0        --> 2.9.1-h8a8886c_1
    libedit:          3.1.20170329-h6b74fdf_2 --> 3.1.20181209-hc058e9b_0
    libgcc-ng:        7.2.0-hdf63c60_3        --> 9.1.0-hdf63c60_0
    libpng:           1.6.34-hb9fc6fc_0       --> 1.6.37-hbc83047_0
    libstdcxx-ng:     7.2.0-hdf63c60_3        --> 9.1.0-hdf63c60_0
    mkl:              2018.0.3-1              --> 2020.0-166
    mkl_fft:          1.0.4-py36h4414c95_0    --> 1.0.15-py38ha843d7b_0
    mkl_random:       1.0.1-py36h4414c95_1    --> 1.1.0-py38h962f231_0
    ncurses:          6.1-hf484d3e_0          --> 6.2-he6710b0_0
    numpy:            1.14.5-py36h1b885b7_4   --> 1.18.1-py38h4f9e942_0
    numpy-base:       1.14.5-py36hdbf6ddf_4   --> 1.18.1-py38hde5b4d6_1
    openssl:          1.0.2o-h20670df_0       --> 1.1.1d-h7b6447c_4
    pip:              10.0.1-py36_0           --> 20.0.2-py38_1
    python:           3.6.5-hc3d631a_2        --> 3.8.1-h0371630_1
    readline:         7.0-ha6073c6_4          --> 7.0-h7b6447c_5
    scipy:            1.1.0-py36hc49cb51_0    --> 1.4.1-py38h0b6359f_0
    setuptools:       39.2.0-py36_0           --> 45.2.0-py38_0
    six:              1.11.0-py36h372c433_1   --> 1.14.0-py38_0
    sqlite:           3.23.1-he433501_0       --> 3.31.1-h7b6447c_0
    tk:               8.6.7-hc745277_3        --> 8.6.8-hbc83047_0
    wheel:            0.31.1-py36_0           --> 0.34.2-py38_0
    zlib:             1.2.11-ha838bed_2       --> 1.2.11-h7b6447c_3

Détails de ce qui s'est passé

Maintenant que la construction est terminée, je vais triomphalement fabriquer un conteneur.

$ docker run -it --rm mypytorch bash

Lorsque j'essaie d'utiliser des commandes de type conda dans le conteneur, cela ne fonctionne pas.

root@ce88f6b1ba73:/workspace# conda
Traceback (most recent call last):
  File "/opt/conda/bin/conda", line 7, in <module>
    from conda.cli import main
ModuleNotFoundError: No module named 'conda'

D'autres ʻi pythonne fonctionnent pas, ou ne peuvent pas être aidés, donc même si vous essayez depython` comme ci-dessous, c'est inutile.

root@ce88f6b1ba73:/workspace# python
Python 3.8.1 (default, Jan  8 2020, 22:29:32)
[GCC 7.3.0] :: Anaconda, Inc. on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import torch
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ModuleNotFoundError: No module named 'torch'
>>>

Donc, j'ai créé une image de quelque chose que je veux déplacer mais rien qui bouge.

Ce que je devais faire

C'était le problème. La version de python a été mise à jour vers la version 3.8.1.

The following packages will be UPDATED:

...
    python:           3.6.5-hc3d631a_2        --> 3.8.1-h0371630_1
...

Il semble que cela ne fonctionnera pas si seulement python est mis à jour sans changer la version de conda. Il y a deux façons de le résoudre.

  1. Mettez à jour conda et python ensemble
  2. Corrigez la version de python

Cette fois, nous corrigerons la version. Pour corriger la version, écrivez ce que vous voulez corriger dans conda-meta / pinned sous le répertoire de gestion de anaconda / miniconda (la manière dont elle sera gérée lorsque plusieurs environnements sont créés n'a pas été vérifiée).

Cette fois, puisque python est fixé à la série 3.6, ce sera comme suit (ici, la destination de l'installation est / opt. Cela dépend de votre environnement).

$ echo "python=3.6.*" >> /opt/conda/conda-meta/pinned

Cela fonctionnera si cela se trouve dans le Dockerfile. En d'autres termes, cela devient comme suit.

FROM pytorch/pytorch:0.4.1-cuda9-cudnn7-devel

RUN apt update && apt upgrade -y

#Version de la broche avant l'installation de conda
RUN echo "python=3.6.*" >> /opt/conda/conda-meta/pinned

# joblib etc
RUN conda install -y \
    joblib \
    matplotlib \
    scikit-learn \
    tqdm

Je ne pense pas que ce soit un accident qui arrive très souvent, mais j'espère que cela aide quelqu'un.

Recommended Posts

Pin python géré par conda
Conseils Python Conda
Jugement des nombres premiers par Python
Conda Python avec Cygwin
Mémo de visualisation par Python
Traitement de la communication par Python
Réponse de Beamformer par python
Reconnaissance vocale par Python MFCC
API Web EXE par Python
Programme de formation des nouveaux arrivants par Python
Paramétrage par le configurateur python
Extraction de mots-clés par MeCab (python)
Séparez les nombres par 3 chiffres (python)
Modèle de commutation de Markov par Python
Traitement d'image par python (Pillow)
Python lancé par des programmeurs C
Jugement de la plateforme (OS) par Python
Trier par date en python
[Python] Tri itérable selon plusieurs conditions
Extension du dictionnaire python par argument
Résumé de l'apprentissage automatique par les débutants de Python
Apprenez Python en dessinant (Turtle Graphics)
Développement Python aidé par le test Jenkins-Unit
Générateur de nombres premiers par Python
instruction SQL python Extraire par heure
Autoriser l'accès aux attributs à Python dict
Détermination du système d'exploitation par Makefile en utilisant Python
Mémo d'automatisation de saisie par Python débutant
Liste des packages installés par conda
Mémo d'apprentissage de la planification des sections ~ par python ~
Comportement de python3 par le serveur de Sakura
100 Language Processing Knock Chapitre 1 par Python
Histoire d'approximation de puissance par Python
Tri des fichiers par convention de dénomination à l'aide de Python
Essayez de créer un environnement python et anaconda sur Mac (avec pyenv, conda)