2016-04-22 33 views
17

ho avuto python 3.4 nel mio virtualenv, ma dopo ubuntu aggiornamento a 16.04 python aggiornato a 3,5 così pitone in virtualenv incidenti con questi errori:virtualenv pitone rotto dopo ubuntu 15.10 aggiornamento a 16.04

Could not find platform independent libraries <prefix> 
Could not find platform dependent libraries <exec_prefix> 
Consider setting $PYTHONHOME to <prefix>[:<exec_prefix>] 
Fatal Python error: Py_Initialize: Unable to get the locale encoding 
ImportError: No module named 'encodings' 

Current thread 0x00007f2f2dbcb700 (most recent call first): 
fish: “python” terminated by signal SIGABRT (Abort) 

Come posso risolvere vero?

+0

Hai provato a reinstallare Python 3.5? Il modulo 'encodings' fa parte dell'installazione di base. – mprat

risposta

4

Ho fissato questo installando il minimo python3.4 lavoro in modo che il mio virtualenv ha funzionato abbastanza bene per ottenere la lista dei pacchetti, poi ha fatto uno nuovo con python3.5 ... come segue:

ottenere python3.4 pacchetti minimi:

wget http://launchpadlibrarian.net/221250032/python3.4-minimal_3.4.3-1ubuntu1~14.04.3_amd64.deb 
wget http://launchpadlibrarian.net/221250033/libpython3.4-minimal_3.4.3-1ubuntu1~14.04.3_amd64.deb 
sudo dpkg -i --force-breaks libpython3.4-minimal_3.4.3-1ubuntu1~14.04.3_amd64.deb 
sudo dpkg -i python3.4-minimal_3.4.3-1ubuntu1~14.04.3_amd64.deb 

mio virtualenv è qui: ~/virtualenv/esempio

ottenere la lista dei pacchetti nel vostro virtualenv (che ora dovrebbe funzionare abbastanza bene per questo, ma potrebbe non fare altre cose correttamente):

source ~/virtualenv/example/bin/activate 
pip freeze > /tmp/requirements.txt 
deactivate 

Sbarazzarsi della python3.4, per tornare a Ubuntu 16.04 di stato preferito:

sudo dpkg --purge python3.4-minimal 
sudo dpkg --force-depends --purge libpython3.4-minimal 

fare un nuovo virtualenv con i pacchetti giusti:

virtualenv -p python3.5 example 
source ~/virtualenv/example/bin/activate 
pip install -r /tmp/requirements.txt 

Ora dovrebbe funzionare, con tutti i tuoi vecchi pacchetti ma in python3.5. Dovrebbe ...

Vedi anche Upgrade python in a virtualenv

1

Ho lo stesso problema e ho risolto ricreando l'intera virtualenv

PS: Ci dispiace per il mio cattivo inglese.

+0

Come spostare il progetto django su un altro virtualenv e farlo funzionare? –

0

Ho riscontrato lo stesso problema e sono riuscito a "correggere" ricreando il virtualenv e reinstallando i pacchetti richiesti utilizzando pip.

Creare un nuovo virtualenv:

virtualenv <new-virtualenv> 

attivarlo:

source <new-virtualenv>/bin/activate 

installare i pacchetti:

pip install <required-packages> 

Ed ero bene ad andare di nuovo!

È possibile mantenere il vecchio virtualenv semplicemente rinominare la cartella:

mv <old-virtualenv> <old-virtualenv>-backup 
+0

Esiste un modo per estrarre l'elenco dei pacchetti pip da virtualenv non funzionante? –

1

Ho avuto lo stesso problema di oggi e che è come ho risolto:

Problema: primo luogo, come Capisco, il problema si verifica perché dopo l'aggiornamento a Ubuntu 16.04 viene aggiornata anche la versione precedente di Python. Di conseguenza i collegamenti simbolici all'interno di qualsiasi ambiente Python3 non funzionano più.

Soluzione 1: Come è stato scritto sopra la soluzione semplice è quella di rimuovere tutti gli ambienti Python3 e crearli nuovamente. Non mi piace perché è la seconda volta che lo faccio dopo aver aggiornato Ubuntu. Probabilmente ho anche bisogno di usare più versioni di Python 3 nei progetti futuri.

Soluzione 2: Questo è quello che ho provato oggi e funziona perfettamente. Invece di usare virtualenv + virtualenvwrapper ho deciso di provare la combinazione di pyenv + pyenv-virtualenv.

La differenza principale tra due approcci è:

Pyenv effettivamente copie un'intera installazione Python ogni volta che si crea una nuova versione pyenv. Al contrario, virtualenv fa uso di collegamenti simbolici per ridurre le dimensioni del virtualenv .

Howto:

  1. Installare pyenv come descritto here insieme a versioni richieste di Python 2 e 3.
  2. Dai uno sguardo a here su come puoi lavorare con virtualenv usando pyenv.
  3. Creare un nuovo ambiente, installare tutte le dipendenze con pip e, si spera, dimenticarsi del problema dei collegamenti simbolici non funzionanti durante il prossimo aggiornamento di Ubuntu.
0

ho riparato con la creazione di un nuovo virtualenv e copiando il file eseguibile di pitone nel vecchio virtualenv rotto.

Problemi correlati