Python - Pakkemanagement

Python - Pakkemanagement

Thu 26 May 2022

Introduksjon til bruk av eksterne pakker i python.

Pakker

Pakker er en samling av filer, klasser, funksjoner og annen kode som utvider funksjonaliteten til programmet vårt. Pakker er skrevet av andre mer eller mindre offisielle utviklere, og kan enkelt brukes i våre egne prosjekter. Det at det er så mange, og gode, pakker lett tilgjengelig er nok en av grunnene til at python økosystemet har blitt så populært.

Noen av de mest populære nedlastingene er boto3 (The AWS SDK for Python), urllib3 (HTTP library with thread-safe connection pooling, file post, and more), requests (Python HTTP for Humans). Du kan se oppdatert statistikk her: https://hugovk.github.io/top-pypi-packages/

Pip pakkemanager

pip er standard pakkemanager som følger med python. Du kan sjekke hvilken versjon du har installert

 % pip --version
pip 22.1.2 from /Users/adrock2nd/opt/miniconda3/envs/ssg/lib/python3.10/site-packages/pip (python 3.10)

Vi kan bruke pip til å installere en pakke:

(base) adrock2nd@kali envtest % python -m venv envtest
(base) adrock2nd@kali envtest % source envtest/bin/activate
(envtest) (base) adrock2nd@kali envtest % pip install camelcase
Collecting camelcase
  Downloading camelcase-0.2.tar.gz (1.3 kB)
  Preparing metadata (setup.py) ... done
Using legacy 'setup.py install' for camelcase, since package 'wheel' is not installed.
Installing collected packages: camelcase
  Running setup.py install for camelcase ... done
Successfully installed camelcase-0.2

Vi kan nå skrive et lite program som benytter seg av pakken vi akkurat har installert:

(envtest) (base) adrock2nd@kali envtest % python
Python 3.9.12 (main, Apr  5 2022, 01:53:17)
[Clang 12.0.0 ] :: Anaconda, Inc. on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> import camelcase
>>> c = camelcase.CamelCase()
>>> txt = "hello world"
>>> print(c.hump(txt))
Hello World
>>> quit()

For å avinstallere en pakke:

(envtest) (base) adrock2nd@kali envtest % pip uninstall camelcase
Found existing installation: camelcase 0.2
Uninstalling camelcase-0.2:
  Would remove:
    /Users/adrock2nd/Utvikling/git/envtest/envtest/lib/python3.9/site-packages/camelcase-0.2-py3.9.egg-info
    /Users/adrock2nd/Utvikling/git/envtest/envtest/lib/python3.9/site-packages/camelcase/*
Proceed (Y/n)? y
  Successfully uninstalled camelcase-0.2

For å holde pakkemanageren oppdatert:

(envtest) (base) adrock2nd@kali envtest % python -m pip install --upgrade pip
Requirement already satisfied: pip in ./envtest/lib/python3.9/site-packages (22.0.4)
...
      Successfully uninstalled pip-22.0.4
Successfully installed pip-22.2

For å liste ut alle pakker som er installert:

(envtest) (base) adrock2nd@kali envtest % pip list
Package    Version
---------- -------
camelcase  0.2
pip        22.2
setuptools 58.1.0

Conda pakkemanager

conda er en annen pakkemanager som er populær i noen miljøer. Fremgangsmåten for å installere pakker er ganske lik:

(base) adrock2nd@kali envtest % conda create --name envtest python
Collecting package metadata (current_repodata.json): done
Solving environment: done
...
Preparing transaction: done
Verifying transaction: done
Executing transaction: done
#
# To activate this environment, use
#
#     $ conda activate envtest
#
# To deactivate an active environment, use
#
#     $ conda deactivate

(base) adrock2nd@kali envtest % conda activate envtest
(envtest) adrock2nd@kali envtest %
(envtest) adrock2nd@kali envtest % conda install jinja2
Collecting package metadata (current_repodata.json): done
Solving environment: done
...
Preparing transaction: done
Verifying transaction: done
Executing transaction: done
(envtest) adrock2nd@kali envtest %

For å avinstallere en pakke:

(envtest) adrock2nd@kali envtest % conda uninstall jinja2
Collecting package metadata (repodata.json): done
Solving environment: done
...
(envtest) adrock2nd@kali envtest %

For å holde pakkemanager og alle pakker i gjeldende miljø oppdatert:

(envtest) adrock2nd@kali envtest % conda update -n base conda
...
(envtest) adrock2nd@kali envtest % conda update --all

For å liste ut alle pakker som er installert i gjeldende miljø:

(envtest) adrock2nd@kali ~ % conda list
# packages in environment at /Users/adrock2nd/opt/miniconda3/envs/envtest:
#
# Name                    Version                   Build  Channel
...
jinja2                    3.0.3              pyhd3eb1b0_0
...
markupsafe                2.1.1           py310hca72f7f_0
...
zlib                      1.2.12               h4dc903c_2

For å få en oversikt over alle miljø:

(envtest) adrock2nd@kali ~ % conda env list
# conda environments:
#
base                     /Users/adrock2nd/miniconda3
msgraph                  /Users/adrock2nd/miniconda3/envs/msgraph
pandas                   /Users/adrock2nd/miniconda3/envs/pandas
postgres              *  /Users/adrock2nd/miniconda3/envs/postgres
ssg                      /Users/adrock2nd/miniconda3/envs/ssg

For å bytte miljø:

(envtest) adrock2nd@kali ~ % conda activate pandas
# conda environments:
#
base                     /Users/adrock2nd/miniconda3
msgraph                  /Users/adrock2nd/miniconda3/envs/msgraph
pandas                   /Users/adrock2nd/miniconda3/envs/pandas
postgres              *  /Users/adrock2nd/miniconda3/envs/postgres
ssg                      /Users/adrock2nd/miniconda3/envs/ssg

Oppsummering

pip følger med som standard pakkehåndterer, mens conda er en pakkehåndterer som gir oss litt mer funksjonalitet. Dersom du bruker anaconda / miniconda distribusjonene så er det anbefalt å bruke conda pakkehåndtereren til så mye som mulig, og kun bruke pip til å installere pakker som conda ikke finner. Da reduserer du sjansen for at de to pakkehåndtererene går i bena på hverandre.

Handling                            Conda                       pip
List alle installerte pakker        conda list                  pip freeze
Installer siste pakkeversjon        conda install package       pip install package
Installer spesifikk pakkeversjonn   conda install package=1.0.0 pip install package==1.0.0
Oppdater en pakke                   conda update package        pip install --upgrade package
Fjern en pakke                      conda remove package        pip uninstall package»
Tagged as : python intro pip conda packages