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.
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)
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
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
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 de
python` 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.
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.
conda
et python
ensemblepython
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