Python - Pakkemanagement
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»