Pin Python von Conda verwaltet

Als ich "conda install hogehoge" gemacht habe, wurde ein ungeplantes Paket (oder "Python") aktualisiert und das Ganze ist gestorben, also werde ich nach einem Memorandum eine Gegenmaßnahme schreiben.

Das Ende

Was ich tun wollte: Ich wollte mein eigenes Image erstellen, indem ich mehrere Bibliotheken hinzufügte, die auf dem Docker-Image von pytorch basierten.

Was ich getan habe: Ich habe "conda install" gehorsam in "Dockerfile" geschrieben Was ist passiert: Die Version von "Python" hat sich zum Zeitpunkt der "Conda-Installation" geändert, und die Conda-Umgebung wurde beschädigt und konnte nicht ordnungsgemäß verwendet werden.

Genin: Nichtübereinstimmung zwischen den Versionen "conda" und "python" Was ich tun musste (Fazit): Schreiben Sie, was Sie reparieren möchten, in eine Datei namens pinned (diesmal gelöst mit python == 3.6. *) (Oder geben Sie die "conda" an, die mit der aktualisierten Version von "python" übereinstimmt. Diesmal nicht ausgeführt.

Referenz

Is it possible to lock versions of packages in Anaconda? - Stack Overflow How to pin Conda | Damian's blog Hinweise zum Ändern der Python-Version von conda --Qiita

Details von dem, was ich getan habe

Ich habe das folgende "Dockerfile" geschrieben (das alte Originalbild, das ich verwende, kann Teil des Problems sein ...).

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

RUN apt update && apt upgrade -y

#Dies wird später ein Problem sein
# joblib etc
RUN conda install -y \
    joblib \
    matplotlib \
    scikit-learn \
    tqdm

Dann bauen.

$ docker build -t mypytorch .

Zu diesem Zeitpunkt zeigte conda install diese als zu aktualisierende Pakete an (der Teil, der später ein Problem sein wird).

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

Details darüber, was passiert ist

Jetzt, wo der Bau beendet ist, werde ich triumphierend einen Container bauen.

$ docker run -it --rm mypytorch bash

Wenn ich versuche, Befehle vom Typ "conda" im Container zu verwenden, funktioniert dies nicht.

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'

Andere ipython funktionieren nicht oder es kann nicht geholfen werden. Selbst wenn Sie es wie folgt mit python versuchen, funktioniert es nicht.

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'
>>>

Also habe ich ein Bild von etwas erstellt, das ich bewegen möchte, aber nichts, das sich bewegt.

Was ich tun musste

Das war das Problem. Die Version von python wurde auf 3.8.1 aktualisiert.

The following packages will be UPDATED:

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

Es scheint, dass es nicht funktioniert, wenn nur "Python" aktualisiert wird, ohne die Version von "conda" zu ändern. Es gibt zwei Möglichkeiten, dies zu lösen.

  1. Aktualisieren Sie conda und python zusammen
  2. Korrigieren Sie die Version von python

Dieses Mal werden wir die Version reparieren. Um die Version zu reparieren, schreiben Sie, was Sie in "conda-meta / pinned" korrigieren möchten, in das Verwaltungsverzeichnis von anaconda / miniconda (wie es behandelt wird, wenn mehrere Umgebungen erstellt werden, wurde nicht überprüft).

Da python diesmal auf die 3.6-Serie festgelegt ist, sieht es wie folgt aus (hier ist das Installationsziel / opt. Dies hängt von Ihrer Umgebung ab).

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

Es wird funktionieren, wenn dies in der Docker-Datei ist. Mit anderen Worten wird es wie folgt.

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

RUN apt update && apt upgrade -y

#Pin-Version vor der Installation von Conda
RUN echo "python=3.6.*" >> /opt/conda/conda-meta/pinned

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

Ich denke nicht, dass es ein Unfall ist, der sehr oft passiert, aber ich hoffe, es hilft jemandem.

Recommended Posts

Pin Python von Conda verwaltet
Python Conda Tipps
Primzahlbeurteilung durch Python
Python Conda mit Cygwin
Visualisierungsnotiz von Python
Kommunikationsverarbeitung durch Python
Beamformer-Antwort von Python
Spracherkennung durch Python MFCC
EXE Web API von Python
Newcomer Trainingsprogramm von Python
Parametereinstellung durch Python Configparser
Keyword-Extraktion mit MeCab (Python)
Zahlen durch 3 Ziffern trennen (Python)
Markov-Schaltmodell von Python
Bildverarbeitung mit Python (Pillow)
Python wurde von C-Programmierern gestartet
Plattform (OS) Beurteilung durch Python
Sortieren nach Datum in Python
[Python] Sortierbar nach mehreren Bedingungen sortieren
Erweiterung des Python-Wörterbuchs um Argumente
Zusammenfassung des maschinellen Lernens von Python-Anfängern
Lerne Python durch Zeichnen (Turtle Graphics)
Python-Entwicklung unterstützt durch Jenkins-Unit-Test
Primzahlgenerator von Python
Python SQL-Anweisung Nach Zeit extrahieren
Attributzugriff auf Python dict zulassen
Betriebssystembestimmung durch Makefile mit Python
Typisierungsautomatisierungsnotiz von Python-Anfängern
Liste der von conda installierten Pakete
Abschnittsplanung Lernnotiz ~ von Python ~
Verhalten von Python3 durch Sakuras Server
100 Sprachverarbeitung Knock Kapitel 1 von Python
Geschichte der Potenznäherung von Python
Sortieren von Dateien nach Namenskonvention mit Python
Versuchen Sie, eine Python- und Anaconda-Umgebung auf einem Mac zu erstellen (mit pyenv, conda).