ium/IUM_09.Python_srodowiska.ipynb

71 KiB

Środowiska wirtualne

Python Virtual Env

Poniżej stworzymy środowisko w katalogu ./myenv:

$ python3 -m venv myenv

Teraz możemy je aktywować:

$ source ./myenv/bin/activate
(myenv) $ which python
/home/tomek/myenv/bin/python

I modyfikować instalując zależności:

(myenv) $ python3 -m pip install requests

Środowisko możemy deaktywować poprzez:

deactivate

Środowisko można udostępnić kopiując cały katalog ze środowiskiem

Conda

_Package, dependency and environment management for any language—Python, R, Ruby, Lua, Scala, Java, JavaScript, C/ C++, FORTRAN, and more.

Conda umożliwia zarządzanie:

  • środowiskami (jak venv)
  • paczkami i zależnościami (jak pip)

Dokumentacja: https://docs.conda.io/en/latest/

Różnice między Conda a venv źródło:

  • Dowolna wersja Python w Conda (inna niż systemowa)
  • Conda zarządza też zależnościami innymi niż Pythonowe
  • Paczki w PyPI (używane przez P

Dystrybucje: Anaconda i Conda

Conda jest dostępna w dwóch dystrybcjach:

  • Miniconda:
    • wymaga 400 MB miejsca na dysku
    • zawiera jedynie podstawowe narzędzia:
      • conda
      • Python
      • pip, zlib
    • pozostałe narzędzia/biblioteki doinstalujemy w miarę potrzeb
  • Anaconda
    • wymaga conajmniej 3 GB miejsca na dysku
    • Zawiera narzędzi GUI Anaconda Navigator (można je doinstalować do Miniconda)
    • zawiera to co Miniconda +:
      • Ponad 1500 preinstalowanych pakietów, głównie "naukowych", m.in.: SciPy, NumPy, Jupyter, scikit-learn, Pandas

Dystrybucje

  • Wersje paczek/bibliotek zawartych w danej dystrybucji są przetestowane pod względem zgodności ze sobą
  • Możemy dokonać zaktualizacji wszystkich pakietów za pomocą polecenia: conda update conda
  • Conda zatroszczy się o to, by rozwiązać potencjalne konflikty wynikające z zależności deklarowanych przez poszczególne biblioteki.
  • Nie zawsze wszystkie biblioteki będą w swoich najnowszych wersjach - mogłoby to powodować problemy z działaniem bibliotek od nich zależnych
  • Podczas aktualizacji niektóre biblioteki mogą zostać "zdowngradowane"
$ conda update conda
Collecting package metadata (current_repodata.json): done
Solving environment: done

## Package Plan ##

  environment location: /home/tomek/miniconda3

  added / updated specs:
    - conda


The following packages will be downloaded:

    package                    |            build
    ---------------------------|-----------------
    attrs-21.2.0               |     pyhd3eb1b0_0          46 KB
    cffi-1.14.5                |   py39h261ae71_0         226 KB
    chardet-4.0.0              |py39h06a4308_1003         194 KB
    conda-package-handling-1.7.3|   py39h27cfd23_1         884 KB
    cryptography-3.4.7         |   py39hd23ed53_0         906 KB
    decorator-5.0.9            |     pyhd3eb1b0_0          12 KB
    glib-2.68.2                |       h36276a3_0         3.0 MB
    idna-2.10                  |     pyhd3eb1b0_0          52 KB
    jinja2-3.0.0               |     pyhd3eb1b0_0         106 KB
    markupsafe-2.0.1           |   py39h27cfd23_0          22 KB
    notebook-6.4.0             |   py39h06a4308_0         4.1 MB
    pygments-2.9.0             |     pyhd3eb1b0_0         721 KB
    pyopenssl-20.0.1           |     pyhd3eb1b0_1          49 KB
    requests-2.25.1            |     pyhd3eb1b0_0          52 KB
    ruamel_yaml-0.15.100       |   py39h27cfd23_0         260 KB
    tqdm-4.59.0                |     pyhd3eb1b0_1          93 KB
    urllib3-1.26.4             |     pyhd3eb1b0_0         105 KB
    ------------------------------------------------------------
                                           Total:        10.7 MB

The following packages will be REMOVED:

  libedit-3.1.20191231-h14c3975_1
  pip-20.3.1-py39h06a4308_0
  wheel-0.36.1-pyhd3eb1b0_0

The following packages will be UPDATED:

  attrs                                 20.3.0-pyhd3eb1b0_0 --> 21.2.0-pyhd3eb1b0_0
  ca-certificates    conda-forge::ca-certificates-2020.12.~ --> pkgs/main::ca-certificates-2021.4.13-h06a4308_1
  cffi                                1.14.4-py39h261ae71_0 --> 1.14.5-py39h261ae71_0
  chardet                           3.0.4-py39h06a4308_1003 --> 4.0.0-py39h06a4308_1003
  conda              conda-forge::conda-4.10.1-py39hf3d152~ --> pkgs/main::conda-4.10.1-py39h06a4308_1
  conda-package-han~                   1.7.2-py39h27cfd23_1 --> 1.7.3-py39h27cfd23_1
  cryptography                         3.3.1-py39h3c74f83_0 --> 3.4.7-py39hd23ed53_0
  decorator                              5.0.6-pyhd3eb1b0_0 --> 5.0.9-pyhd3eb1b0_0
  glib                                    2.68.1-h36276a3_0 --> 2.68.2-h36276a3_0
  jinja2                                2.11.3-pyhd3eb1b0_0 --> 3.0.0-pyhd3eb1b0_0
  markupsafe                           1.1.1-py39h27cfd23_0 --> 2.0.1-py39h27cfd23_0
  notebook                             6.3.0-py39h06a4308_0 --> 6.4.0-py39h06a4308_0
  pygments                               2.8.1-pyhd3eb1b0_0 --> 2.9.0-pyhd3eb1b0_0
  pyopenssl                             20.0.0-pyhd3eb1b0_1 --> 20.0.1-pyhd3eb1b0_1
  readline                                   8.0-h7b6447c_0 --> 8.1-h27cfd23_0
  requests                              2.25.0-pyhd3eb1b0_0 --> 2.25.1-pyhd3eb1b0_0
  ruamel_yaml                        0.15.80-py39h27cfd23_0 --> 0.15.100-py39h27cfd23_0
  setuptools                          51.0.0-py39h06a4308_2 --> 52.0.0-py39h06a4308_0
  sqlite                                  3.33.0-h62c20be_0 --> 3.35.4-hdfb4753_0
  tqdm                                  4.54.1-pyhd3eb1b0_0 --> 4.59.0-pyhd3eb1b0_1
  tzdata                                   2020d-h14c3975_0 --> 2020f-h52ac0ba_0
  urllib3                                      1.25.11-py_0 --> 1.26.4-pyhd3eb1b0_0

The following packages will be SUPERSEDED by a higher-priority channel:

  certifi            conda-forge::certifi-2020.12.5-py39hf~ --> pkgs/main::certifi-2020.12.5-py39h06a4308_0

The following packages will be DOWNGRADED:

  idna                                            2.10-py_0 --> 2.10-pyhd3eb1b0_0


Proceed ([y]/n)? y

[...]

Instalacja

Instrukcje:

Pakiety Conda

Pakiet (Package) conda to archiwum o rozszerzeniu .tar.bz2 lub .condazawierające:

  • folder lib: biblioteki systemowe, moduły Python

  • folder bin: pliki wykonywalne i wszelkie inne pliki potrzebne to zainstalowania danej zależności

  • metadane w katalogu info/

    Pakiety można:

  • wyszukiwać: conda search pytorch

  • instalować: conda install pytorch

  • tworzyć: conda build hello_world

  • usuwać: conda remove pytorch

Repozytoria i kanały

  • Pakiety mogą być ściągane z różnych kanałów ("channels")
  • Kanały mogą być zdalne albo lokalne
  • Domyślny kanał to https://repo.anaconda.com/pkgs/ - zawiera ponad 7,5 tys pakietów, jest utrzymywany przez Anacondę.
  • Jeśli jakiejś paczki nie ma na oficjalnym kanale, bardzo możliwe, że znajdziemy ją na Conda-forge - kanale utrzymywanym przez społeczność
  • Wyszukiwanie i przeglądanie pakietów: conda i conda-forge

Na przykład, pakiet mlflow nie jest dostępny na oficjalnym kanale:

conda search mlflow
Loading channels: done
No match found for: mlflow. Search: *mlflow*

PackagesNotFoundError: The following packages are not available from current channels:

  - mlflow

Current channels:

  - https://repo.anaconda.com/pkgs/main/linux-64
  - https://repo.anaconda.com/pkgs/main/noarch
  - https://repo.anaconda.com/pkgs/r/linux-64
  - https://repo.anaconda.com/pkgs/r/noarch

To search for alternate channels that may provide the conda package you're
looking for, navigate to

    https://anaconda.org

and use the search bar at the top of the page.



Note: you may need to restart the kernel to use updated packages.

Do poleceń search i install możemy dodać flagę channel co doda podany kanał do listy przeszukiwanych przez to polecenie kanałów:

conda search mlflow --channel conda-forge
Loading channels: done
# Name                       Version           Build  Channel             
mlflow                       0.9.0.1            py_0  conda-forge         
mlflow                         0.9.1            py_0  conda-forge         
mlflow                         1.0.0          py27_0  conda-forge         
mlflow                         1.0.0          py27_1  conda-forge         
mlflow                         1.0.0            py_2  conda-forge         
mlflow                         1.0.0            py_3  conda-forge         
mlflow                         1.1.0            py_0  conda-forge         
mlflow                         1.2.0            py_0  conda-forge         
mlflow                         1.2.0            py_1  conda-forge         
mlflow                         1.3.0          py36_0  conda-forge         
mlflow                         1.3.0          py37_0  conda-forge         
mlflow                         1.4.0          py36_0  conda-forge         
mlflow                         1.4.0          py37_0  conda-forge         
mlflow                         1.4.0          py38_0  conda-forge         
mlflow                         1.5.0          py36_0  conda-forge         
mlflow                         1.5.0          py36_1  conda-forge         
mlflow                         1.5.0          py37_0  conda-forge         
mlflow                         1.5.0          py37_1  conda-forge         
mlflow                         1.5.0          py38_0  conda-forge         
mlflow                         1.5.0          py38_1  conda-forge         
mlflow                         1.6.0          py36_0  conda-forge         
mlflow                         1.6.0          py37_0  conda-forge         
mlflow                         1.6.0          py38_0  conda-forge         
mlflow                         1.7.0          py36_0  conda-forge         
mlflow                         1.7.0          py37_0  conda-forge         
mlflow                         1.7.0          py38_0  conda-forge         
mlflow                         1.7.1  py36h9f0ad1d_0  conda-forge         
mlflow                         1.7.1  py37hc8dfbb8_0  conda-forge         
mlflow                         1.7.1  py38h32f6830_0  conda-forge         
mlflow                         1.7.2  py36h9f0ad1d_0  conda-forge         
mlflow                         1.7.2  py37hc8dfbb8_0  conda-forge         
mlflow                         1.7.2  py38h32f6830_0  conda-forge         
mlflow                         1.8.0  py36h9f0ad1d_0  conda-forge         
mlflow                         1.8.0  py37hc8dfbb8_0  conda-forge         
mlflow                         1.8.0  py38h32f6830_0  conda-forge         
mlflow                         1.9.1  py36h9f0ad1d_0  conda-forge         
mlflow                         1.9.1  py37hc8dfbb8_0  conda-forge         
mlflow                         1.9.1  py38h32f6830_0  conda-forge         
mlflow                        1.10.0  py36h9f0ad1d_0  conda-forge         
mlflow                        1.10.0  py37hc8dfbb8_0  conda-forge         
mlflow                        1.10.0  py38h32f6830_0  conda-forge         
mlflow                        1.11.0  py36h9f0ad1d_0  conda-forge         
mlflow                        1.11.0  py36h9f0ad1d_1  conda-forge         
mlflow                        1.11.0  py37hc8dfbb8_0  conda-forge         
mlflow                        1.11.0  py37hc8dfbb8_1  conda-forge         
mlflow                        1.11.0  py38h32f6830_0  conda-forge         
mlflow                        1.11.0  py38h32f6830_1  conda-forge         
mlflow                        1.12.0  py36h5fab9bb_0  conda-forge         
mlflow                        1.12.0  py37h89c1867_0  conda-forge         
mlflow                        1.12.0  py38h578d9bd_0  conda-forge         
mlflow                        1.12.1  py36h5fab9bb_0  conda-forge         
mlflow                        1.12.1  py37h89c1867_0  conda-forge         
mlflow                        1.12.1  py38h578d9bd_0  conda-forge         
mlflow                          1.13  py36h5fab9bb_0  conda-forge         
mlflow                          1.13  py37h89c1867_0  conda-forge         
mlflow                          1.13  py38h578d9bd_0  conda-forge         
mlflow                        1.13.1  py36h5fab9bb_0  conda-forge         
mlflow                        1.13.1  py36h5fab9bb_2  conda-forge         
mlflow                        1.13.1  py36hd000896_2  conda-forge         
mlflow                        1.13.1  py37h89c1867_0  conda-forge         
mlflow                        1.13.1  py37h89c1867_2  conda-forge         
mlflow                        1.13.1  py38h578d9bd_0  conda-forge         
mlflow                        1.13.1  py38h578d9bd_2  conda-forge         
mlflow                        1.13.1  py39hf3d152e_2  conda-forge         
mlflow                        1.14.0  py36h24e63a9_1  conda-forge         
mlflow                        1.14.0  py36h5fab9bb_0  conda-forge         
mlflow                        1.14.0  py36h87b8279_1  conda-forge         
mlflow                        1.14.0  py36hd000896_0  conda-forge         
mlflow                        1.14.0  py37h02d9ccd_1  conda-forge         
mlflow                        1.14.0  py37h89c1867_0  conda-forge         
mlflow                        1.14.0  py38h578d9bd_0  conda-forge         
mlflow                        1.14.0  py38he918c71_1  conda-forge         
mlflow                        1.14.0  py39ha39b057_1  conda-forge         
mlflow                        1.14.0  py39hf3d152e_0  conda-forge         
mlflow                        1.14.1  py36h24e63a9_0  conda-forge         
mlflow                        1.14.1  py36h87b8279_0  conda-forge         
mlflow                        1.14.1  py37h02d9ccd_0  conda-forge         
mlflow                        1.14.1  py38he918c71_0  conda-forge         
mlflow                        1.14.1  py39ha39b057_0  conda-forge         
mlflow                        1.15.0  py36h24e63a9_0  conda-forge         
mlflow                        1.15.0  py36h87b8279_0  conda-forge         
mlflow                        1.15.0  py37h02d9ccd_0  conda-forge         
mlflow                        1.15.0  py38he918c71_0  conda-forge         
mlflow                        1.15.0  py39ha39b057_0  conda-forge         
mlflow                        1.16.0  py36h24e63a9_0  conda-forge         
mlflow                        1.16.0  py36h87b8279_0  conda-forge         
mlflow                        1.16.0  py37h02d9ccd_0  conda-forge         
mlflow                        1.16.0  py38he918c71_0  conda-forge         
mlflow                        1.16.0  py39ha39b057_0  conda-forge         
mlflow                        1.17.0  py36h24e63a9_0  conda-forge         
mlflow                        1.17.0  py36h24e63a9_1  conda-forge         
mlflow                        1.17.0  py36h87b8279_0  conda-forge         
mlflow                        1.17.0  py36h87b8279_1  conda-forge         
mlflow                        1.17.0  py37h02d9ccd_0  conda-forge         
mlflow                        1.17.0  py37h02d9ccd_1  conda-forge         
mlflow                        1.17.0  py38he918c71_0  conda-forge         
mlflow                        1.17.0  py38he918c71_1  conda-forge         
mlflow                        1.17.0  py39ha39b057_0  conda-forge         
mlflow                        1.17.0  py39ha39b057_1  conda-forge         

Note: you may need to restart the kernel to use updated packages.

Możemy dodać kanał conda-forge tak, żeby był używany automatycznie (bez podawania flagi channel):

conda config --add channels conda-forge
Warning: 'conda-forge' already in 'channels' list, moving to the top

Note: you may need to restart the kernel to use updated packages.

Polecanie conda info pokaże nam m.in. używane domyślnie kanały. Możem dodawać i usuwać kanały oraz zmieniać ich kolejność (priorytet) edytując plik ~/.condarc

conda info
     active environment : base
    active env location : /home/tomek/miniconda3
            shell level : 1
       user config file : /home/tomek/.condarc
 populated config files : /home/tomek/.condarc
          conda version : 4.10.1
    conda-build version : not installed
         python version : 3.9.1.final.0
       virtual packages : __cuda=11.2=0
                          __linux=5.4.0=0
                          __glibc=2.31=0
                          __unix=0=0
                          __archspec=1=x86_64
       base environment : /home/tomek/miniconda3  (writable)
      conda av data dir : /home/tomek/miniconda3/etc/conda
  conda av metadata url : https://repo.anaconda.com/pkgs/main
           channel URLs : https://conda.anaconda.org/conda-forge/linux-64
                          https://conda.anaconda.org/conda-forge/noarch
                          https://repo.anaconda.com/pkgs/main/linux-64
                          https://repo.anaconda.com/pkgs/main/noarch
                          https://repo.anaconda.com/pkgs/r/linux-64
                          https://repo.anaconda.com/pkgs/r/noarch
          package cache : /home/tomek/miniconda3/pkgs
                          /home/tomek/.conda/pkgs
       envs directories : /home/tomek/miniconda3/envs
                          /home/tomek/.conda/envs
               platform : linux-64
             user-agent : conda/4.10.1 requests/2.25.1 CPython/3.9.1 Linux/5.4.0-73-generic ubuntu/20.04.2 glibc/2.31
                UID:GID : 1000:1000
             netrc file : None
           offline mode : False


Note: you may need to restart the kernel to use updated packages.

Jak widać, po dodaniu kanału conda-forge, pakiet mlflow zostaje znaleziony:

conda search mlflow
Loading channels: done
# Name                       Version           Build  Channel             
mlflow                       0.9.0.1            py_0  conda-forge         
mlflow                         0.9.1            py_0  conda-forge         
mlflow                         1.0.0          py27_0  conda-forge         
mlflow                         1.0.0          py27_1  conda-forge         
mlflow                         1.0.0            py_2  conda-forge         
mlflow                         1.0.0            py_3  conda-forge         
mlflow                         1.1.0            py_0  conda-forge         
mlflow                         1.2.0            py_0  conda-forge         
mlflow                         1.2.0            py_1  conda-forge         
mlflow                         1.3.0          py36_0  conda-forge         
mlflow                         1.3.0          py37_0  conda-forge         
mlflow                         1.4.0          py36_0  conda-forge         
mlflow                         1.4.0          py37_0  conda-forge         
mlflow                         1.4.0          py38_0  conda-forge         
mlflow                         1.5.0          py36_0  conda-forge         
mlflow                         1.5.0          py36_1  conda-forge         
mlflow                         1.5.0          py37_0  conda-forge         
mlflow                         1.5.0          py37_1  conda-forge         
mlflow                         1.5.0          py38_0  conda-forge         
mlflow                         1.5.0          py38_1  conda-forge         
mlflow                         1.6.0          py36_0  conda-forge         
mlflow                         1.6.0          py37_0  conda-forge         
mlflow                         1.6.0          py38_0  conda-forge         
mlflow                         1.7.0          py36_0  conda-forge         
mlflow                         1.7.0          py37_0  conda-forge         
mlflow                         1.7.0          py38_0  conda-forge         
mlflow                         1.7.1  py36h9f0ad1d_0  conda-forge         
mlflow                         1.7.1  py37hc8dfbb8_0  conda-forge         
mlflow                         1.7.1  py38h32f6830_0  conda-forge         
mlflow                         1.7.2  py36h9f0ad1d_0  conda-forge         
mlflow                         1.7.2  py37hc8dfbb8_0  conda-forge         
mlflow                         1.7.2  py38h32f6830_0  conda-forge         
mlflow                         1.8.0  py36h9f0ad1d_0  conda-forge         
mlflow                         1.8.0  py37hc8dfbb8_0  conda-forge         
mlflow                         1.8.0  py38h32f6830_0  conda-forge         
mlflow                         1.9.1  py36h9f0ad1d_0  conda-forge         
mlflow                         1.9.1  py37hc8dfbb8_0  conda-forge         
mlflow                         1.9.1  py38h32f6830_0  conda-forge         
mlflow                        1.10.0  py36h9f0ad1d_0  conda-forge         
mlflow                        1.10.0  py37hc8dfbb8_0  conda-forge         
mlflow                        1.10.0  py38h32f6830_0  conda-forge         
mlflow                        1.11.0  py36h9f0ad1d_0  conda-forge         
mlflow                        1.11.0  py36h9f0ad1d_1  conda-forge         
mlflow                        1.11.0  py37hc8dfbb8_0  conda-forge         
mlflow                        1.11.0  py37hc8dfbb8_1  conda-forge         
mlflow                        1.11.0  py38h32f6830_0  conda-forge         
mlflow                        1.11.0  py38h32f6830_1  conda-forge         
mlflow                        1.12.0  py36h5fab9bb_0  conda-forge         
mlflow                        1.12.0  py37h89c1867_0  conda-forge         
mlflow                        1.12.0  py38h578d9bd_0  conda-forge         
mlflow                        1.12.1  py36h5fab9bb_0  conda-forge         
mlflow                        1.12.1  py37h89c1867_0  conda-forge         
mlflow                        1.12.1  py38h578d9bd_0  conda-forge         
mlflow                          1.13  py36h5fab9bb_0  conda-forge         
mlflow                          1.13  py37h89c1867_0  conda-forge         
mlflow                          1.13  py38h578d9bd_0  conda-forge         
mlflow                        1.13.1  py36h5fab9bb_0  conda-forge         
mlflow                        1.13.1  py36h5fab9bb_2  conda-forge         
mlflow                        1.13.1  py36hd000896_2  conda-forge         
mlflow                        1.13.1  py37h89c1867_0  conda-forge         
mlflow                        1.13.1  py37h89c1867_2  conda-forge         
mlflow                        1.13.1  py38h578d9bd_0  conda-forge         
mlflow                        1.13.1  py38h578d9bd_2  conda-forge         
mlflow                        1.13.1  py39hf3d152e_2  conda-forge         
mlflow                        1.14.0  py36h24e63a9_1  conda-forge         
mlflow                        1.14.0  py36h5fab9bb_0  conda-forge         
mlflow                        1.14.0  py36h87b8279_1  conda-forge         
mlflow                        1.14.0  py36hd000896_0  conda-forge         
mlflow                        1.14.0  py37h02d9ccd_1  conda-forge         
mlflow                        1.14.0  py37h89c1867_0  conda-forge         
mlflow                        1.14.0  py38h578d9bd_0  conda-forge         
mlflow                        1.14.0  py38he918c71_1  conda-forge         
mlflow                        1.14.0  py39ha39b057_1  conda-forge         
mlflow                        1.14.0  py39hf3d152e_0  conda-forge         
mlflow                        1.14.1  py36h24e63a9_0  conda-forge         
mlflow                        1.14.1  py36h87b8279_0  conda-forge         
mlflow                        1.14.1  py37h02d9ccd_0  conda-forge         
mlflow                        1.14.1  py38he918c71_0  conda-forge         
mlflow                        1.14.1  py39ha39b057_0  conda-forge         
mlflow                        1.15.0  py36h24e63a9_0  conda-forge         
mlflow                        1.15.0  py36h87b8279_0  conda-forge         
mlflow                        1.15.0  py37h02d9ccd_0  conda-forge         
mlflow                        1.15.0  py38he918c71_0  conda-forge         
mlflow                        1.15.0  py39ha39b057_0  conda-forge         
mlflow                        1.16.0  py36h24e63a9_0  conda-forge         
mlflow                        1.16.0  py36h87b8279_0  conda-forge         
mlflow                        1.16.0  py37h02d9ccd_0  conda-forge         
mlflow                        1.16.0  py38he918c71_0  conda-forge         
mlflow                        1.16.0  py39ha39b057_0  conda-forge         
mlflow                        1.17.0  py36h24e63a9_0  conda-forge         
mlflow                        1.17.0  py36h24e63a9_1  conda-forge         
mlflow                        1.17.0  py36h87b8279_0  conda-forge         
mlflow                        1.17.0  py36h87b8279_1  conda-forge         
mlflow                        1.17.0  py37h02d9ccd_0  conda-forge         
mlflow                        1.17.0  py37h02d9ccd_1  conda-forge         
mlflow                        1.17.0  py38he918c71_0  conda-forge         
mlflow                        1.17.0  py38he918c71_1  conda-forge         
mlflow                        1.17.0  py39ha39b057_0  conda-forge         
mlflow                        1.17.0  py39ha39b057_1  conda-forge         

Note: you may need to restart the kernel to use updated packages.

Środowiska (Environments)

  • Podstawową funkcjonalnością, którą zapewnia conda są izolowane środowiska
  • Nie zapewniają one takiego stopnia izolacji co np. Docker, ale ma to swoje zalety
  • Środowisko to tak naprawdę katalog zawierający zbiór bibliotek, plików wykonywalnych i innych zależności
  • Środowiska mogą zawierać różne wersje zarówno modułów Python jak i bibliotek systemowych, plików wykonywalnych (w tym samego Pythona)
  • Domyślne środowisko nazywa się base. Nie powinniśmy go modyfikować a raczej tworzyć nowe środowisko dla każdego zastosowania

Wyświetlanie listy środowisk:

conda info --envs
# conda environments:
#
                         /home/tomek/anaconda3
base                  *  /home/tomek/miniconda3
mlflow-004410b12f95e2e00831a0ba11ee1bfdc29d6f9d     /home/tomek/miniconda3/envs/mlflow-004410b12f95e2e00831a0ba11ee1bfdc29d6f9d
mlflow-503f0c7520a32f054a9d168bd099584a9439de9d     /home/tomek/miniconda3/envs/mlflow-503f0c7520a32f054a9d168bd099584a9439de9d
mlflow-5987e03d4dbaa5faa1a697bb113be9b9bdc39b29     /home/tomek/miniconda3/envs/mlflow-5987e03d4dbaa5faa1a697bb113be9b9bdc39b29


Note: you may need to restart the kernel to use updated packages.

Tworzenie środowiska

Środowisko można utworzyć i skonfigurować interaktywnie, lub z pliku *.yml

conda create --name hello_env -y
Collecting package metadata (current_repodata.json): done
Solving environment: done

## Package Plan ##

  environment location: /home/tomek/miniconda3/envs/hello_env



Preparing transaction: done
Verifying transaction: done
Executing transaction: done
#
# To activate this environment, use
#
#     $ conda activate hello_env
#
# To deactivate an active environment, use
#
#     $ conda deactivate


Note: you may need to restart the kernel to use updated packages.

Aktywacja środowiska

  • Żeby zmodyfikować środowisko albo zacząć z niego korzystać, musimy je aktywować.
  • Aktywacja środowiska polega tak naprawdę na zmianie zmiennych środowiskowych, które mówią programom gdzie szukać ładowanych przez nie bibliotek i plików wykonywalnych, takich jak PATH, PYTHON_PATH itp.
  • Po aktywowaniu środowiska w konsoli zobaczymy jego nazwę dopisaną na początku lini poleceń:
$ conda activate hello_env
(hello_env) tomek@tomek-asus:/home$ python3 --version
Python 3.8.5

Domyślnie wersja pythona będzie taka sama jak systemowa. Żeby deaktywować środowisko, używamy conda deactivate:

$ conda deactivate
python3 --version
Python 3.8.5

Modyfikowanie środowiska

Jeśli chcemy stworzyc środowisko z inną wersją niż systemowa:

conda create -y -n myenv python=3.9
Collecting package metadata (current_repodata.json): done
Solving environment: done

## Package Plan ##

  environment location: /home/tomek/miniconda3/envs/myenv

  added / updated specs:
    - python=3.9


The following packages will be downloaded:

    package                    |            build
    ---------------------------|-----------------
    _libgcc_mutex-0.1          |      conda_forge           3 KB  conda-forge
    _openmp_mutex-4.5          |            1_gnu          22 KB  conda-forge
    ld_impl_linux-64-2.35.1    |       hea4e1c9_2         618 KB  conda-forge
    libffi-3.3                 |       h58526e2_2          51 KB  conda-forge
    libgcc-ng-9.3.0            |      h2828fa1_19         7.8 MB  conda-forge
    libgomp-9.3.0              |      h2828fa1_19         376 KB  conda-forge
    libstdcxx-ng-9.3.0         |      h6de172a_19         4.0 MB  conda-forge
    ncurses-6.2                |       h58526e2_4         985 KB  conda-forge
    openssl-1.1.1k             |       h7f98852_0         2.1 MB  conda-forge
    pip-21.1.2                 |     pyhd8ed1ab_0         1.1 MB  conda-forge
    python-3.9.4               |hffdb5ce_0_cpython        27.4 MB  conda-forge
    readline-8.1               |       h46c0cb4_0         295 KB  conda-forge
    setuptools-49.6.0          |   py39hf3d152e_3         943 KB  conda-forge
    tk-8.6.10                  |       h21135ba_1         3.2 MB  conda-forge
    tzdata-2021a               |       he74cb21_0         121 KB  conda-forge
    wheel-0.36.2               |     pyhd3deb0d_0          31 KB  conda-forge
    xz-5.2.5                   |       h516909a_1         343 KB  conda-forge
    zlib-1.2.11                |    h516909a_1010         106 KB  conda-forge
    ------------------------------------------------------------
                                           Total:        49.4 MB

The following NEW packages will be INSTALLED:

  _libgcc_mutex      conda-forge/linux-64::_libgcc_mutex-0.1-conda_forge
  _openmp_mutex      conda-forge/linux-64::_openmp_mutex-4.5-1_gnu
  ca-certificates    conda-forge/linux-64::ca-certificates-2020.12.5-ha878542_0
  certifi            conda-forge/linux-64::certifi-2020.12.5-py39hf3d152e_1
  ld_impl_linux-64   conda-forge/linux-64::ld_impl_linux-64-2.35.1-hea4e1c9_2
  libffi             conda-forge/linux-64::libffi-3.3-h58526e2_2
  libgcc-ng          conda-forge/linux-64::libgcc-ng-9.3.0-h2828fa1_19
  libgomp            conda-forge/linux-64::libgomp-9.3.0-h2828fa1_19
  libstdcxx-ng       conda-forge/linux-64::libstdcxx-ng-9.3.0-h6de172a_19
  ncurses            conda-forge/linux-64::ncurses-6.2-h58526e2_4
  openssl            conda-forge/linux-64::openssl-1.1.1k-h7f98852_0
  pip                conda-forge/noarch::pip-21.1.2-pyhd8ed1ab_0
  python             conda-forge/linux-64::python-3.9.4-hffdb5ce_0_cpython
  python_abi         conda-forge/linux-64::python_abi-3.9-1_cp39
  readline           conda-forge/linux-64::readline-8.1-h46c0cb4_0
  setuptools         conda-forge/linux-64::setuptools-49.6.0-py39hf3d152e_3
  sqlite             conda-forge/linux-64::sqlite-3.35.5-h74cdb3f_0
  tk                 conda-forge/linux-64::tk-8.6.10-h21135ba_1
  tzdata             conda-forge/noarch::tzdata-2021a-he74cb21_0
  wheel              conda-forge/noarch::wheel-0.36.2-pyhd3deb0d_0
  xz                 conda-forge/linux-64::xz-5.2.5-h516909a_1
  zlib               conda-forge/linux-64::zlib-1.2.11-h516909a_1010



Downloading and Extracting Packages
openssl-1.1.1k       | 2.1 MB    | ##################################### | 100% 
_libgcc_mutex-0.1    | 3 KB      | ##################################### | 100% 
xz-5.2.5             | 343 KB    | ##################################### | 100% 
zlib-1.2.11          | 106 KB    | ##################################### | 100% 
tk-8.6.10            | 3.2 MB    | ##################################### | 100% 
python-3.9.4         | 27.4 MB   | ##################################### | 100% 
ncurses-6.2          | 985 KB    | ##################################### | 100% 
libstdcxx-ng-9.3.0   | 4.0 MB    | ##################################### | 100% 
tzdata-2021a         | 121 KB    | ##################################### | 100% 
setuptools-49.6.0    | 943 KB    | ##################################### | 100% 
wheel-0.36.2         | 31 KB     | ##################################### | 100% 
_openmp_mutex-4.5    | 22 KB     | ##################################### | 100% 
libffi-3.3           | 51 KB     | ##################################### | 100% 
libgomp-9.3.0        | 376 KB    | ##################################### | 100% 
ld_impl_linux-64-2.3 | 618 KB    | ##################################### | 100% 
readline-8.1         | 295 KB    | ##################################### | 100% 
pip-21.1.2           | 1.1 MB    | ##################################### | 100% 
libgcc-ng-9.3.0      | 7.8 MB    | ##################################### | 100% 
Preparing transaction: done
Verifying transaction: done
Executing transaction: done
#
# To activate this environment, use
#
#     $ conda activate myenv
#
# To deactivate an active environment, use
#
#     $ conda deactivate


Note: you may need to restart the kernel to use updated packages.

Rzeczywiście, stworzone środowisko ma wersję Pythona z linii 3.9:

$ conda activate myenv
(myenv)$ python3 --version
Python 3.9.4

Tak samo, przy tworzeniu środowiska możemy podać inne zależności wraz z ich wersjami:

conda create -y -n p39-mlflow-pandas python=3.9 pandas=1.2.3 mlflow
Collecting package metadata (current_repodata.json): done
Solving environment: done

## Package Plan ##

  environment location: /home/tomek/miniconda3/envs/p39-mlflow-pandas

  added / updated specs:
    - mlflow
    - pandas=1.2.3
    - python=3.9


The following packages will be downloaded:

    package                    |            build
    ---------------------------|-----------------
    alembic-1.6.3              |     pyhd8ed1ab_0         114 KB  conda-forge
    appdirs-1.4.4              |     pyh9f0ad1d_0          13 KB  conda-forge
    asn1crypto-1.4.0           |     pyh9f0ad1d_0          78 KB  conda-forge
    brotlipy-0.7.0             |py39h3811e60_1001         341 KB  conda-forge
    cffi-1.14.5                |   py39he32792d_0         227 KB  conda-forge
    chardet-4.0.0              |   py39hf3d152e_1         205 KB  conda-forge
    click-8.0.1                |   py39hf3d152e_0         146 KB  conda-forge
    cloudpickle-1.6.0          |             py_0          22 KB  conda-forge
    configparser-5.0.2         |     pyhd8ed1ab_0          21 KB  conda-forge
    cryptography-3.4.7         |   py39hbca0aa6_0         1.1 MB  conda-forge
    databricks-cli-0.9.1       |             py_0          48 KB  conda-forge
    dataclasses-0.8            |     pyhc8e2a94_1           7 KB  conda-forge
    docker-py-5.0.0            |   py39hf3d152e_0         187 KB  conda-forge
    docker-pycreds-0.4.0       |             py_0          11 KB  conda-forge
    entrypoints-0.3            |  pyhd8ed1ab_1003           8 KB  conda-forge
    flask-2.0.1                |     pyhd8ed1ab_0          70 KB  conda-forge
    gitdb-4.0.7                |     pyhd8ed1ab_0          46 KB  conda-forge
    gitpython-3.1.17           |     pyhd8ed1ab_0         115 KB  conda-forge
    gorilla-0.4.0              |     pyhd8ed1ab_0          13 KB  conda-forge
    greenlet-1.1.0             |   py39he80948d_0          84 KB  conda-forge
    gunicorn-20.1.0            |   py39hf3d152e_0         119 KB  conda-forge
    idna-2.10                  |     pyh9f0ad1d_0          52 KB  conda-forge
    itsdangerous-2.0.1         |     pyhd8ed1ab_0          17 KB  conda-forge
    jinja2-3.0.1               |     pyhd8ed1ab_0          99 KB  conda-forge
    libblas-3.9.0              |       9_openblas          11 KB  conda-forge
    libcblas-3.9.0             |       9_openblas          11 KB  conda-forge
    libgfortran-ng-9.3.0       |      hff62375_19          22 KB  conda-forge
    libgfortran5-9.3.0         |      hff62375_19         2.0 MB  conda-forge
    liblapack-3.9.0            |       9_openblas          11 KB  conda-forge
    libopenblas-0.3.15         |pthreads_h8fe5266_1         9.2 MB  conda-forge
    libprotobuf-3.17.0         |       h780b84a_0         2.5 MB  conda-forge
    mako-1.1.4                 |     pyh44b312d_0          58 KB  conda-forge
    markupsafe-2.0.1           |   py39h3811e60_0          22 KB  conda-forge
    mlflow-1.2.0               |             py_1         3.4 MB  conda-forge
    numpy-1.20.3               |   py39hdbf815f_0         5.8 MB  conda-forge
    packaging-20.9             |     pyh44b312d_0          35 KB  conda-forge
    pandas-1.2.3               |   py39hde0f152_0        12.1 MB  conda-forge
    protobuf-3.17.0            |   py39he80948d_0         346 KB  conda-forge
    pycparser-2.20             |     pyh9f0ad1d_2          94 KB  conda-forge
    pyopenssl-20.0.1           |     pyhd8ed1ab_0          48 KB  conda-forge
    pyparsing-2.4.7            |     pyh9f0ad1d_0          60 KB  conda-forge
    pysocks-1.7.1              |   py39hf3d152e_3          28 KB  conda-forge
    python-dateutil-2.8.1      |             py_0         220 KB  conda-forge
    python-editor-1.0.4        |             py_0           9 KB  conda-forge
    pytz-2021.1                |     pyhd8ed1ab_0         239 KB  conda-forge
    pyyaml-5.4.1               |   py39h3811e60_0         193 KB  conda-forge
    querystring_parser-1.2.4   |             py_0          10 KB  conda-forge
    requests-2.25.1            |     pyhd3deb0d_0          51 KB  conda-forge
    simplejson-3.17.2          |   py39h3811e60_2         103 KB  conda-forge
    six-1.16.0                 |     pyh6c4a22f_0          14 KB  conda-forge
    smmap-3.0.5                |     pyh44b312d_0          22 KB  conda-forge
    sqlalchemy-1.4.15          |   py39h3811e60_0         2.3 MB  conda-forge
    sqlparse-0.4.1             |     pyh9f0ad1d_0          34 KB  conda-forge
    tabulate-0.8.9             |     pyhd8ed1ab_0          26 KB  conda-forge
    typing_extensions-3.7.4.3  |             py_0          25 KB  conda-forge
    urllib3-1.26.4             |     pyhd8ed1ab_0          99 KB  conda-forge
    websocket-client-0.57.0    |   py39hf3d152e_4          59 KB  conda-forge
    werkzeug-2.0.1             |     pyhd8ed1ab_0         219 KB  conda-forge
    yaml-0.2.5                 |       h516909a_0          82 KB  conda-forge
    ------------------------------------------------------------
                                           Total:        42.3 MB

The following NEW packages will be INSTALLED:

  _libgcc_mutex      conda-forge/linux-64::_libgcc_mutex-0.1-conda_forge
  _openmp_mutex      conda-forge/linux-64::_openmp_mutex-4.5-1_gnu
  alembic            conda-forge/noarch::alembic-1.6.3-pyhd8ed1ab_0
  appdirs            conda-forge/noarch::appdirs-1.4.4-pyh9f0ad1d_0
  asn1crypto         conda-forge/noarch::asn1crypto-1.4.0-pyh9f0ad1d_0
  brotlipy           conda-forge/linux-64::brotlipy-0.7.0-py39h3811e60_1001
  ca-certificates    conda-forge/linux-64::ca-certificates-2020.12.5-ha878542_0
  certifi            conda-forge/linux-64::certifi-2020.12.5-py39hf3d152e_1
  cffi               conda-forge/linux-64::cffi-1.14.5-py39he32792d_0
  chardet            conda-forge/linux-64::chardet-4.0.0-py39hf3d152e_1
  click              conda-forge/linux-64::click-8.0.1-py39hf3d152e_0
  cloudpickle        conda-forge/noarch::cloudpickle-1.6.0-py_0
  configparser       conda-forge/noarch::configparser-5.0.2-pyhd8ed1ab_0
  cryptography       conda-forge/linux-64::cryptography-3.4.7-py39hbca0aa6_0
  databricks-cli     conda-forge/noarch::databricks-cli-0.9.1-py_0
  dataclasses        conda-forge/noarch::dataclasses-0.8-pyhc8e2a94_1
  docker-py          conda-forge/linux-64::docker-py-5.0.0-py39hf3d152e_0
  docker-pycreds     conda-forge/noarch::docker-pycreds-0.4.0-py_0
  entrypoints        conda-forge/noarch::entrypoints-0.3-pyhd8ed1ab_1003
  flask              conda-forge/noarch::flask-2.0.1-pyhd8ed1ab_0
  gitdb              conda-forge/noarch::gitdb-4.0.7-pyhd8ed1ab_0
  gitpython          conda-forge/noarch::gitpython-3.1.17-pyhd8ed1ab_0
  gorilla            conda-forge/noarch::gorilla-0.4.0-pyhd8ed1ab_0
  greenlet           conda-forge/linux-64::greenlet-1.1.0-py39he80948d_0
  gunicorn           conda-forge/linux-64::gunicorn-20.1.0-py39hf3d152e_0
  idna               conda-forge/noarch::idna-2.10-pyh9f0ad1d_0
  itsdangerous       conda-forge/noarch::itsdangerous-2.0.1-pyhd8ed1ab_0
  jinja2             conda-forge/noarch::jinja2-3.0.1-pyhd8ed1ab_0
  ld_impl_linux-64   conda-forge/linux-64::ld_impl_linux-64-2.35.1-hea4e1c9_2
  libblas            conda-forge/linux-64::libblas-3.9.0-9_openblas
  libcblas           conda-forge/linux-64::libcblas-3.9.0-9_openblas
  libffi             conda-forge/linux-64::libffi-3.3-h58526e2_2
  libgcc-ng          conda-forge/linux-64::libgcc-ng-9.3.0-h2828fa1_19
  libgfortran-ng     conda-forge/linux-64::libgfortran-ng-9.3.0-hff62375_19
  libgfortran5       conda-forge/linux-64::libgfortran5-9.3.0-hff62375_19
  libgomp            conda-forge/linux-64::libgomp-9.3.0-h2828fa1_19
  liblapack          conda-forge/linux-64::liblapack-3.9.0-9_openblas
  libopenblas        conda-forge/linux-64::libopenblas-0.3.15-pthreads_h8fe5266_1
  libprotobuf        conda-forge/linux-64::libprotobuf-3.17.0-h780b84a_0
  libstdcxx-ng       conda-forge/linux-64::libstdcxx-ng-9.3.0-h6de172a_19
  mako               conda-forge/noarch::mako-1.1.4-pyh44b312d_0
  markupsafe         conda-forge/linux-64::markupsafe-2.0.1-py39h3811e60_0
  mlflow             conda-forge/noarch::mlflow-1.2.0-py_1
  ncurses            conda-forge/linux-64::ncurses-6.2-h58526e2_4
  numpy              conda-forge/linux-64::numpy-1.20.3-py39hdbf815f_0
  openssl            conda-forge/linux-64::openssl-1.1.1k-h7f98852_0
  packaging          conda-forge/noarch::packaging-20.9-pyh44b312d_0
  pandas             conda-forge/linux-64::pandas-1.2.3-py39hde0f152_0
  pip                conda-forge/noarch::pip-21.1.2-pyhd8ed1ab_0
  protobuf           conda-forge/linux-64::protobuf-3.17.0-py39he80948d_0
  pycparser          conda-forge/noarch::pycparser-2.20-pyh9f0ad1d_2
  pyopenssl          conda-forge/noarch::pyopenssl-20.0.1-pyhd8ed1ab_0
  pyparsing          conda-forge/noarch::pyparsing-2.4.7-pyh9f0ad1d_0
  pysocks            conda-forge/linux-64::pysocks-1.7.1-py39hf3d152e_3
  python             conda-forge/linux-64::python-3.9.4-hffdb5ce_0_cpython
  python-dateutil    conda-forge/noarch::python-dateutil-2.8.1-py_0
  python-editor      conda-forge/noarch::python-editor-1.0.4-py_0
  python_abi         conda-forge/linux-64::python_abi-3.9-1_cp39
  pytz               conda-forge/noarch::pytz-2021.1-pyhd8ed1ab_0
  pyyaml             conda-forge/linux-64::pyyaml-5.4.1-py39h3811e60_0
  querystring_parser conda-forge/noarch::querystring_parser-1.2.4-py_0
  readline           conda-forge/linux-64::readline-8.1-h46c0cb4_0
  requests           conda-forge/noarch::requests-2.25.1-pyhd3deb0d_0
  setuptools         conda-forge/linux-64::setuptools-49.6.0-py39hf3d152e_3
  simplejson         conda-forge/linux-64::simplejson-3.17.2-py39h3811e60_2
  six                conda-forge/noarch::six-1.16.0-pyh6c4a22f_0
  smmap              conda-forge/noarch::smmap-3.0.5-pyh44b312d_0
  sqlalchemy         conda-forge/linux-64::sqlalchemy-1.4.15-py39h3811e60_0
  sqlite             conda-forge/linux-64::sqlite-3.35.5-h74cdb3f_0
  sqlparse           conda-forge/noarch::sqlparse-0.4.1-pyh9f0ad1d_0
  tabulate           conda-forge/noarch::tabulate-0.8.9-pyhd8ed1ab_0
  tk                 conda-forge/linux-64::tk-8.6.10-h21135ba_1
  typing_extensions  conda-forge/noarch::typing_extensions-3.7.4.3-py_0
  tzdata             conda-forge/noarch::tzdata-2021a-he74cb21_0
  urllib3            conda-forge/noarch::urllib3-1.26.4-pyhd8ed1ab_0
  websocket-client   conda-forge/linux-64::websocket-client-0.57.0-py39hf3d152e_4
  werkzeug           conda-forge/noarch::werkzeug-2.0.1-pyhd8ed1ab_0
  wheel              conda-forge/noarch::wheel-0.36.2-pyhd3deb0d_0
  xz                 conda-forge/linux-64::xz-5.2.5-h516909a_1
  yaml               conda-forge/linux-64::yaml-0.2.5-h516909a_0
  zlib               conda-forge/linux-64::zlib-1.2.11-h516909a_1010



Downloading and Extracting Packages
smmap-3.0.5          | 22 KB     | ##################################### | 100% 
sqlalchemy-1.4.15    | 2.3 MB    | ##################################### | 100% 
appdirs-1.4.4        | 13 KB     | ##################################### | 100% 
gunicorn-20.1.0      | 119 KB    | ##################################### | 100% 
pyopenssl-20.0.1     | 48 KB     | ##################################### | 100% 
mako-1.1.4           | 58 KB     | ##################################### | 100% 
libopenblas-0.3.15   | 9.2 MB    | ##################################### | 100% 
libcblas-3.9.0       | 11 KB     | ##################################### | 100% 
gitdb-4.0.7          | 46 KB     | ##################################### | 100% 
click-8.0.1          | 146 KB    | ##################################### | 100% 
gorilla-0.4.0        | 13 KB     | ##################################### | 100% 
gitpython-3.1.17     | 115 KB    | ##################################### | 100% 
typing_extensions-3. | 25 KB     | ##################################### | 100% 
pysocks-1.7.1        | 28 KB     | ##################################### | 100% 
pandas-1.2.3         | 12.1 MB   | ##################################### | 100% 
libgfortran-ng-9.3.0 | 22 KB     | ##################################### | 100% 
docker-pycreds-0.4.0 | 11 KB     | ##################################### | 100% 
docker-py-5.0.0      | 187 KB    | ##################################### | 100% 
itsdangerous-2.0.1   | 17 KB     | ##################################### | 100% 
configparser-5.0.2   | 21 KB     | ##################################### | 100% 
sqlparse-0.4.1       | 34 KB     | ##################################### | 100% 
werkzeug-2.0.1       | 219 KB    | ##################################### | 100% 
alembic-1.6.3        | 114 KB    | ##################################### | 100% 
tabulate-0.8.9       | 26 KB     | ##################################### | 100% 
cloudpickle-1.6.0    | 22 KB     | ##################################### | 100% 
asn1crypto-1.4.0     | 78 KB     | ##################################### | 100% 
brotlipy-0.7.0       | 341 KB    | ##################################### | 100% 
dataclasses-0.8      | 7 KB      | ##################################### | 100% 
cryptography-3.4.7   | 1.1 MB    | ##################################### | 100% 
pycparser-2.20       | 94 KB     | ##################################### | 100% 
libprotobuf-3.17.0   | 2.5 MB    | ##################################### | 100% 
simplejson-3.17.2    | 103 KB    | ##################################### | 100% 
requests-2.25.1      | 51 KB     | ##################################### | 100% 
pytz-2021.1          | 239 KB    | ##################################### | 100% 
flask-2.0.1          | 70 KB     | ##################################### | 100% 
numpy-1.20.3         | 5.8 MB    | ##################################### | 100% 
markupsafe-2.0.1     | 22 KB     | ##################################### | 100% 
idna-2.10            | 52 KB     | ##################################### | 100% 
six-1.16.0           | 14 KB     | ##################################### | 100% 
libgfortran5-9.3.0   | 2.0 MB    | ##################################### | 100% 
liblapack-3.9.0      | 11 KB     | ##################################### | 100% 
pyparsing-2.4.7      | 60 KB     | ##################################### | 100% 
packaging-20.9       | 35 KB     | ##################################### | 100% 
jinja2-3.0.1         | 99 KB     | ##################################### | 100% 
chardet-4.0.0        | 205 KB    | ##################################### | 100% 
protobuf-3.17.0      | 346 KB    | ##################################### | 100% 
urllib3-1.26.4       | 99 KB     | ##################################### | 100% 
pyyaml-5.4.1         | 193 KB    | ##################################### | 100% 
databricks-cli-0.9.1 | 48 KB     | ##################################### | 100% 
websocket-client-0.5 | 59 KB     | ##################################### | 100% 
python-dateutil-2.8. | 220 KB    | ##################################### | 100% 
greenlet-1.1.0       | 84 KB     | ##################################### | 100% 
entrypoints-0.3      | 8 KB      | ##################################### | 100% 
yaml-0.2.5           | 82 KB     | ##################################### | 100% 
libblas-3.9.0        | 11 KB     | ##################################### | 100% 
mlflow-1.2.0         | 3.4 MB    | ##################################### | 100% 
cffi-1.14.5          | 227 KB    | ##################################### | 100% 
python-editor-1.0.4  | 9 KB      | ##################################### | 100% 
querystring_parser-1 | 10 KB     | ##################################### | 100% 
Preparing transaction: done
Verifying transaction: done
Executing transaction: done
#
# To activate this environment, use
#
#     $ conda activate p39-mlflow-pandas
#
# To deactivate an active environment, use
#
#     $ conda deactivate


Note: you may need to restart the kernel to use updated packages.

Możemy podać jakie pakiety i w jakich wersjach mają być domyślnie dodawane do nowo tworzonych środowisk za pomocą sekcji create_default_package w pliku ~/.condarc

create_default_packages:
  - python=3.9
  - pandas=1.2.3
  - mlflow

Doinstalowanie nowych pakietów może odbyć się poprzez:

  • conda install mlflow - wywołane w aktywowanym środowisku
  • conda install -n myenv mlflow - wywołane spoza atkywanego środowiska (instaluje mlflow w środowisku myenv)
  • pip install - jeśli w środowisku mamy zainstalowane polecenie pip - używamy pip tylko, jeśli pakiet nie jest dostępny w repozytoriach conda. Uwagi dotyczące używania pip razem z Conda: link

Klonowanie środowiska

Istniejące środowisko można skopiować:

conda create --name myclone --clone myenv

Eksportowanie środowisk

  • Definicję środowiska można wyeksportować do pliku *.yml, który może potem posłużyć do jego odtworzenia
  • Takie pliki są np. wykorzystywane przez MLflow
conda env export -n myenv
name: myenv
channels:
  - conda-forge
  - defaults
dependencies:
  - _libgcc_mutex=0.1=conda_forge
  - _openmp_mutex=4.5=1_gnu
  - ca-certificates=2020.12.5=ha878542_0
  - certifi=2020.12.5=py39hf3d152e_1
  - ld_impl_linux-64=2.35.1=hea4e1c9_2
  - libffi=3.3=h58526e2_2
  - libgcc-ng=9.3.0=h2828fa1_19
  - libgomp=9.3.0=h2828fa1_19
  - libstdcxx-ng=9.3.0=h6de172a_19
  - ncurses=6.2=h58526e2_4
  - openssl=1.1.1k=h7f98852_0
  - pip=21.1.2=pyhd8ed1ab_0
  - python=3.9.4=hffdb5ce_0_cpython
  - python_abi=3.9=1_cp39
  - readline=8.1=h46c0cb4_0
  - setuptools=49.6.0=py39hf3d152e_3
  - sqlite=3.35.5=h74cdb3f_0
  - tk=8.6.10=h21135ba_1
  - tzdata=2021a=he74cb21_0
  - wheel=0.36.2=pyhd3deb0d_0
  - xz=5.2.5=h516909a_1
  - zlib=1.2.11=h516909a_1010
prefix: /home/tomek/miniconda3/envs/myenv

Note: you may need to restart the kernel to use updated packages.

Normalnie, zapisalibyśmy wyni eksportu do pliku:

conda env export -n myenv > myenv.yml
Note: you may need to restart the kernel to use updated packages.

Eksport między systemami

  • Jeśli chcemy zapeniwć, że nasze środowisko będzie można odtworzyć na innym systemie, musimy uyżyć flagi --from-history
  • Użycie tej flagi spowoduje eksport jedynie tych zależności, które explicite instalowaliśmy (bez ich zależności, które mogą być niekompatybilne między systemami)
conda env export --from-history #Jeśli nie podamy nazwy środowiska, eksportujemy aktywne środowisko
name: base
channels:
  - conda-forge
  - defaults
dependencies:
  - conda
  - python=3.9
  - jupyter
  - rise
  - anaconda-navigator
prefix: /home/tomek/miniconda3

Note: you may need to restart the kernel to use updated packages.

Tworzenie środowiska z pliku *.yml

Mając plik *.yml wyeksportowany za pomocą conda env export albo stworzony/zmodyfikowane ręcznie, możemy utworzyć na jego podstawie środowisko:

conda env create -n myenv_from_file -f myenv.yml
Collecting package metadata (repodata.json): done
Solving environment: done
Preparing transaction: done
Verifying transaction: done
Executing transaction: done
#
# To activate this environment, use
#
#     $ conda activate myenv_from_file
#
# To deactivate an active environment, use
#
#     $ conda deactivate


Note: you may need to restart the kernel to use updated packages.

Zadania

  1. Zainstaluj Anaconda lub Miniconda na swoim komputerze
  2. Stwórz środowisko zawierające wszystkie zależności wymagane przez stworzone na zajęciach skrypty/programy
  3. Wyeksportuj środowisko do pliku environment.yml i dodaj ten plik do repozytorium