User Tools

Site Tools


doc:appunti:prog:python27_on_debian6

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revisionPrevious revision
Next revision
Previous revision
Next revisionBoth sides next revision
doc:appunti:prog:python27_on_debian6 [2018/12/19 11:44] – [Archivi da installare] niccolodoc:appunti:prog:python27_on_debian6 [2019/05/29 12:49] – [Problema con pip e ssl] niccolo
Line 10: Line 10:
  
 <code> <code>
-apt-get install git gcc build-essential \+apt-get install curl git gcc build-essential \
  libmysqlclient-dev libadns1-dev \  libmysqlclient-dev libadns1-dev \
  libreadline-dev libgdbm-dev zlib1g-dev libsqlite3-dev \  libreadline-dev libgdbm-dev zlib1g-dev libsqlite3-dev \
Line 16: Line 16:
 </code> </code>
  
-Questa è l'installazione di pyenv effettuata nella directory utente **$HOME/.pyenv/** :!: che è sconsigliata se deve essere usata a livello di sistema:+==== Installazione in $HOME utente ==== 
 + 
 +:!: **ATTENZIONE**: Qui si installa pyenv nella directory utente **$HOME/.pyenv/** che è **sconsigliato** se deve essere usata a livello di sistema (vedi più avanti):
  
 <code> <code>
 curl -L https://raw.githubusercontent.com/pyenv/pyenv-installer/master/bin/pyenv-installer \ curl -L https://raw.githubusercontent.com/pyenv/pyenv-installer/master/bin/pyenv-installer \
     > pyenv-installer     > pyenv-installer
 +export USE_GIT_URI='yes'
 cat pyenv-installer | bash cat pyenv-installer | bash
 </code> </code>
 +
 +==== Installazione in /usr/local/lib/ ====
  
 Più opportunamente si può usare una **directory di sistema**, pur eseguendo il tutto da **utente non privilegiato**. L'impostazione **USE_GIT_URI** serve ad utilizzre http invece di https per aggirare il problema di SSL su vecchie distribuzioni: //tlsv1 alert protocol version//. Più opportunamente si può usare una **directory di sistema**, pur eseguendo il tutto da **utente non privilegiato**. L'impostazione **USE_GIT_URI** serve ad utilizzre http invece di https per aggirare il problema di SSL su vecchie distribuzioni: //tlsv1 alert protocol version//.
Line 35: Line 40:
 cat pyenv-installer | bash cat pyenv-installer | bash
 </code> </code>
 +
 +==== Utilizzo di pyenv ====
  
 Dopo aver installato il tool pyenv è necessario inizializzare l'ambiente prima di usarlo (conviene aggiungere i comandi a ''.bashrc'' o simili): Dopo aver installato il tool pyenv è necessario inizializzare l'ambiente prima di usarlo (conviene aggiungere i comandi a ''.bashrc'' o simili):
Line 58: Line 65:
 </code> </code>
  
-Dopo avere settato queste variabili è possibile installare librerie con il gestore **pip** (resta il problema del download automatico via https, per aggirarlo è necessario fare il download del pacchetto da un altro host e quindi eseguire **pip install nomefile.tar.gz**).+Dopo avere settato queste variabili è possibile installare librerie con il gestore **pip**. Resta il problema del download automatico via https, per aggirarlo è necessario fare il download del pacchetto da un altro host e quindi eseguire **pip install nomefile.tar.gz**.
  
-==== Ricollocazione dell'installazione ====+==== Ricollocazione dell'installazione di pyenv ====
  
-La directory ''$HOME/.pyenv/'' non può essere spostata altrove facilmenteAd esempio tutti gli script creati in **$HOME/.pyenv/versions/2.7.13/bin/** contengono hard-coded il percorso di installazione originale.+La directory ''$HOME/.pyenv/'' **non può essere spostata altrove**Molti degli eseguibili creati in **$HOME/.pyenv/versions/2.7.13/** contengono hard-coded il percorso di installazione originale, ad esempio:
  
 +  * bin/python2.7
 +  * lib/libpython2.7.a
 +  * lib/pkgconfig/python-2.7.pc
 +
 +==== Problema con pip e ssl ====
 +
 +Con l'installazione di **pyenv** e di **Python 2.7.13** non si risolve il **problema dell'SSL** (Debian 6 fornisce una versione troppo vecchia della libreria, quindi il **wget** da siti **https falisce**).
 +
 +Ad esempio anche la ricerca della **libreria openpyxl** fallisce:
 +
 +<code>
 +pip search openpyxl
 +...
 +SSLError: [SSL: TLSV1_ALERT_PROTOCOL_VERSION] tlsv1 alert protocol version (_ssl.c:661)
 +</code>
 +
 +<code>
 +pip install /usr/local/download/openpyxl/jdcal-1.4.1-py2.py3-none-any.whl
 +</code>
 +
 +La soluzione è scaricare l'archivio **openpyxl-2.6.2.tar.gz** (i sorgenti della libreria) da **[[https://pypi.org/project/openpyxl/#files|pypi.org]]** e scompattarlo, ad esempio in /usr/local/download/openpyxl/openpyxl-2.6.2/. Quindi - dopo aver settato le **variabili di ambiente Pyenv** - si esegue:
 +
 +<code>
 +pip install /usr/local/download/openpyxl/openpyxl-2.6.2/
 +</code>
 ===== Su Fedora 12 ===== ===== Su Fedora 12 =====
  
Line 81: Line 113:
  
 ===== Archivi da installare ===== ===== Archivi da installare =====
 +
 +Un esempio pratico: si deve eseguire uno script Python che utilizza le librerie **bs4**, **lxml** e **suds**.
  
 Avendo installato Python 2.7, si dovrà cercare le librerie marcate con **cp27**, che significa appunto CPython 2.7 (la versione ufficiale di Python distrinuita da python.org). Avendo installato Python 2.7, si dovrà cercare le librerie marcate con **cp27**, che significa appunto CPython 2.7 (la versione ufficiale di Python distrinuita da python.org).
Line 93: Line 127:
   * [[https://pypi.org/project/suds2/|suds2]]   * [[https://pypi.org/project/suds2/|suds2]]
  
-/usr/local/bin/python+Se si desidera che eseguento genericamente python venga avviata la versione 2.7 invece che quella di sistema, basta creare uno script **/usr/local/bin/python** che contiene:
  
 +<code bash>
 +#!/bin/sh
 +export PYENV_ROOT="/usr/local/lib/pyenv"
 +export PATH="/usr/local/lib/pyenv/bin:$PATH"
 +eval "$(pyenv init - --no-rehash)"
 +eval "$(pyenv virtualenv-init -)"
 +export PYENV_VERSION=2.7.13
 +exec python $@
 +</code>
 +
 +L'opzione **%%--no-rehash%%** serve ad evitare l'errore causato dal tentativo di python di aggiornare la directory degli [[wp>Shim (computing)|shim]] (script che intercettano le chiamate ai vari tool e le dirottano all'eseguibile opportuno):
 +
 +<code>
 +pyenv: cannot rehash: /usr/local/lib/pyenv/shims isn't writable
 +</code>
 +
 +Ricordarsi comunque che per eseguire **pip** e simili bisogna impostare le variabili d'ambiente.
 +
 +===== Installazione con pip =====
 +
 +Il comando **pip** può essere usato per installare le librerie necessarie nell'ambiente Python in uso. In caso di Python installato in backporting come illustrato sopra (**pyenv**, ecc.) è sufficiente **impostare le variabili d'ambiente** necessarie a pyenv prima di eseguire pip.
 +
 +Alcuni comandi utili:
 +
 +^ pip list                      | Elenca i pacchetti installati tramite il sistema pip.  |
 +^ pip freeze                    | Elenca i pacchetti installati tramite il sistema pip, in formato //requirements// |
 +^ pip search package            | Cerca un pacchetto disponibile nei repository pip.  |
 +^ pip install package           | Scarica un pacchetto dai repository e lo installa.  |
 +^ pip install /src/pkg/dir/     | Installa un pacchetto dalla directory di installazione (deve contenere il file **setup.py**).  |
 +^ pip uninstall package         | Rimuove un pacchetto installato. Se si desidera disinstallare una specifica versione, usare la stringa prodotta da //pip freeze// (requirements format), ad esempio:\\ pip uninstall Pillow==5.4.1  |
 +
 +Per vedere **quali moduli installati da pip sono disponibili in Pyton** (e le rispettive versioni), eseguire in Python:
 +
 +<code>
 +import pip
 +pip.get_installed_distributions(local_only=True)
 +[ setuptools 28.8.0 (/usr/local/lib/pyenv/versions/2.7.13/lib/python2.7/site-packages),
 +  pip 9.0.1 (/usr/local/lib/pyenv/versions/2.7.13/lib/python2.7/site-packages),
 +  openpyxl 2.4.9 (/usr/local/lib/pyenv/versions/2.7.13/lib/python2.7/site-packages),
 +  jdcal 1.3 (/usr/local/lib/pyenv/versions/2.7.13/lib/python2.7/site-packages),
 +  et-xmlfile 1.0.1 (/usr/local/lib/pyenv/versions/2.7.13/lib/python2.7/site-packages)
 +]
 +</code>
 +
 +Si ottiene l'elenco delle librerie contenute in **$PYTHONPATH/../lib/python2.7/site-packages/**.
 +
 +**ATTENZIONE**: L'elenco sopra riportato dovrebbe essere lo stesso riportato da **list** o **freeze**
 +
 +<code>
 +pip list
 +et-xmlfile (1.0.1)
 +jdcal (1.3)
 +openpyxl (2.6.2, /usr/local/download/openpyxl/openpyxl-2.6.2)
 +Pillow (5.4.1, /usr/local/download/python-pil/Pillow-5.4.1/src)
 +pip (9.0.1)
 +setuptools (28.8.0)
 +</code>
 +
 +<code>
 +pip freeze
 +et-xmlfile==1.0.1
 +jdcal==1.3
 +openpyxl==2.6.2
 +Pillow==5.4.1
 +</code>
 +
 +Se i due elenchi differiscono potrebbe dipendere dal fatto che il pyenv non ha impostato correttamente le variabili d'ambiente (vedi sopra il problema della rilocazione dei file dopo l'installazione).
 +
 +===== Aggiornamento libreria con pip =====
 +
 +È possibile installare una versione aggiornata di una libreria tramite pip, disinstallando eventualmente il pacchetto Debian che contiene la vecchia versione. Ad esempio:
 +
 +<code>
 +dpkg --purge python-openpyxl
 +pip install openpyxl
 +</code>
  
doc/appunti/prog/python27_on_debian6.txt · Last modified: 2021/10/09 17:49 by niccolo