conda: un gestore di pacchetti software per python (e non ... · python non è installato nel...

31
Conda: un gestore di pacchetti software per Python (e non solo) Riccardo Vianello PyCon5 – Firenze, 23 maggio 2014

Upload: phamnguyet

Post on 20-Jan-2019

214 views

Category:

Documents


0 download

TRANSCRIPT

Conda: un gestore di pacchetti software per Python (e non solo)

Riccardo Vianello

PyCon5 – Firenze, 23 maggio 2014

Packaging e distribuzione

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)

● (NumPy), SciPy, Matplotlib, ...● VTK● Applicazioni GIS● Qt/PyQt

● 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

● ­­system­site­packages

● Modifiche a site.py

● Link simbolici in site­packages

● 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

● Pacchetti binari● Hard/soft links quando possibile● Package cache locale

● Python-Agnostic (o quasi)● Può gestire tanto bene il software Python

quanto le librerie da cui dipende

Installazione e utilizzo base

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 ├── conda­meta ├── 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

 $ conda info ­e

 $ conda list $ conda list ­e > reqs.txt

 $ conda search 

Rimozione di pacchetti e environments

$ conda remove ­n myenv numpy

$ conda remove ­n myenv ­­all

(Ma ok anche rimuovere semplicemente la directory)

Casi d'uso

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

Conda Recipes

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 <pkg­file>

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

Ringraziamenti

● Continuum Analytics ● Associazione Python Italia● Voi qui presenti

Domande?