Conda: un gestore di pacchetti software per Python (e non solo) Riccardo Vianello PyCon5 – Firenze, 23 maggio 2014
Conda: un gestore di pacchetti software per Python (e non solo)
Riccardo Vianello
PyCon5 – Firenze, 23 maggio 2014
PyPA
● Python Packaging Authorityhttps://github.com/pypa
https://groups.google.com/forum/#!forum/pypa-dev
● virtualenv, pip, setuptools● PEP405 (venv in Python 3.3)● PEP453 (ensurepip in Python 3.4)
● Python non è installato nel virtualenv
● Usiamo Python (anche) perchè ci rende accessibili una quantità di librerie.. che gli strumenti che usiamo non gestiscono
Espedienti e workarounds
● systemsitepackages
● Modifiche a site.py
● Link simbolici in sitepackages
● PYTHONPATH, LD_LIBRARY_PATH, ...
● Configurazione rapida e flessibile di ambienti di lavoro
● Riproducibilità
Cosa è Conda
● Creato per la distribuzione Python Anaconda● Cross platform (Linux, OSX, Windows)● Open Source (BSD)
Cosa è Conda
● Alternativa a pip / virtualenv / virtualenvwrapper● Simile a yum/apt, homebrew, chocolatey
● Non richiede privilegi di amministratore● Pacchetti sono tarball + metadati● Facile ridistribuzione
● Python-Agnostic (o quasi)● Può gestire tanto bene il software Python
quanto le librerie da cui dipende
Come procurarsi Conda
● Anaconda
http://continuum.io/downloads
(distribuzione completa, 125+ pkgs, ~350 MB)
● Miniconda
http://conda.pydata.org/miniconda.html
(minimale, conda + interprete, ~20 MB)
*conda/ ├── pkgs ├── condameta ├── envs ├── [...] ├── bin ├── lib └── include
Cache dei pacchetti
Metadati
Environments
“Root” environment
$ conda create n myenv ipython
$ conda create n myenv numpy=1.7
$ conda create n myenv f reqs.txt
$ conda create p ~ric/myenv ipython
Creazione di un environment
$ source activate myenv
$ source activate /home/ric/myenv
(myenv) $ conda install numpy
(myenv) $ conda update ipython
(myenv) $ source deactivate
Gestione di un environment
Rimozione di pacchetti e environments
$ conda remove n myenv numpy
$ conda remove n myenv all
(Ma ok anche rimuovere semplicemente la directory)
Conda per lavoro e sviluppo
● Configurazione rapida e riproducibile di ambienti di sviluppo anche complessi
● Gestione estesa a librerie e altre componenti “non-python”
Conda nel testing
● Rapidità● Riproducibilità
Installare e configurare anche Postgresql in un ambiente di test è questione di secondi
Conda + Travis CIhttp://conda.pydata.org/docs/travis.html
Conda nel deployment
"Solid Python Application Deployments For Everybody"
(H Schlawack, PyCon/EuroPython 2013)
● Riproducibilità● Atomicità● Rollback● Efficienza
Conda nel deployment
La compilazione sull'host può essere difficoltosa o impossibile
● Installazione di pacchetti nativi (rpm, deb, ..)● Soluzioni ibride (dh-virtualenv)
L'uso di pip/virtualenv quindi poco pratico o insufficiente
Conda nel deployment
POC: Deployment su OpenShift
● Installazione e configurazione via git, conda e pip
● Configurazione sostanzialmente indipendente da quanto reso disponibile dal provider
● Maggiore flessibilità rispetto alle cartridges
https://github.com/rvianello/openshift-anaconda-quickstart
Se un pacchetto per conda non fosse disponibile?
● Si usa pip● Si installa dai sorgenti● Si scrive una “recipe” e si crea il pacchetto
http://conda.pydata.org/docs/build.html
Struttura di una recipe
mypackage/
├── meta.yaml
├── bld.bat
├── build.sh
├── patch.diff
└── run_test.py
$ conda build </path/to/mypackage>
pip/setup.py,cmake,make,...
Produrre pacchetti per conda
In alcuni casi:
$ conda skeleton pypi mypackage
$ conda pipbuild <name on pypi>
$ conda convert <pkgfile>
Links
● Project web site
http://conda.pydata.org/● GitHub repos:
https://github.com/conda● Mailing list
https://groups.google.com/a/continuum.io/forum/?fromgroups#!forum/anaconda
Links