2015-12-29 14 views
14

Sto provando a creare un ambiente virtuale utilizzando virtualenv su Mac OS X El Capitan. Ho installato Python 2.7.11 con brew, che include pip, wheel e setuptools per impostazione predefinita.virtualenv non include pip

Hovewer, quando provo ad installare virtualenv seguenti istruzioni del documentation o da qualsiasi altra risorsa, ho diversi problemi:

  1. virtualenv eseguibile non è collocato in /usr/local/bin dopo pip fa il suo lavoro, quindi ho bisogno a ln -s a mano (potrebbe indicare che c'è qualcosa di sbagliato nell'installazione in questo passaggio).
  2. Dopo corro virtualenv venv, si crea nuovo ambiente, le catture Python 2.7.11 da brew -INSTALLAZIONE, ma: non c'è pip all'interno bin cartella. Ciò significa che se provo which pip, con venv attivato, restituisce una posizione globale di pip - /usr/local/bin/pip, non /path/to/venv/bin/pip.

Di conseguenza, l'installazione dei pacchetti all'interno venv utilizza il Global pip e li installa a un globale sites-packages, non che dentro venv, ed è tutto il contrario di quello che dovrebbe fare dell'ambiente.

Potresti suggerire cosa potrebbe essere sbagliato e come risolverlo?

MODIFICA: La cosa da dire è che avevo installato sul mio computer altre versioni di Python, che ho eliminato di recente come descritto in in this answer. Forse causa il problema e è necessaria una pulizia più accurata.

+0

Hai usato 'sudo' durante l'installazione di' virtualenv'? Forse è stato installato come pacchetto privato dell'utente in qualche modo e questo sta causando i problemi. (Come non avere ovunque i binari sono posizionati durante l'installazione su 'PATH', ecc.) – millimoose

+0

@millimoose Ho provato entrambi senza' sudo' e con esso, il risultato è lo stesso. È improbabile il problema dei privilegi, in quanto è possibile utilizzare 'virtualenv.py' [localmente dall'origine] (https://virtualenv.pypa.io/en/latest/installation.html). Anche l'uso di 'virtualenv.py' da tarball non riesce a spedire' pip'. – mikeonly

risposta

9

Provare a rimuovere o rinominare il file .pydistutils.cfg nella propria directory home, ad es. rinominando con mv ~/.pydistutils.cfg ~/oldpydistutils.cfg

Sto mettendo una risposta dettagliata qui per aiutare gli altri, ma il credito originale va a this answer. Se sai che cosa specificamente in .pydistutils.cfg stava causando il problema, fammi sapere!

Avevo lo stesso problema: i miei ambienti virtuali sono stati creati senza una copia locale di pip, sebbene avessero una copia locale di python. Ciò significava che l'utilizzo di $ pip dall'ambiente virtuale installato nella posizione globale del pacchetto e non era visibile al python dell'ambiente.

Come ho diagnosticato questo sulla mia macchina:

  1. creo un virtualenvironment con $ virtualenv env
  2. Attivato l'ambiente virtuale con $ source env/bin/activate
  3. Controllato posizione pitone: correre (env)$ which python con uscita /Users/<username>/env/bin/python (come previsto)
  4. Posizione pip verificata: corsa (env)$ which pip con uscita /usr/local/bin/pip (non prevista)

per controllare dove i nostri pacchetti sono in corso, possiamo provare a installare un pacchetto in un ambiente virtuale:

  1. tenta di installare un pacchetto: (env)$ pip install HTTPServer che riesce
  2. provare a eseguire il pacchetto: (env)$ python -m HTTPServer che non riesce con l'errore /Users/emunsing/env/bin/python: No module named HTTPServer
  3. di controllare due volte, provare a installare di nuovo: (env)$ pip install HTTPServer che produce Requirement already satisfied (use --upgrade to upgrade): HTTPServer in /usr/local/lib/python2.7/site-packages

duplice controllo, si vede che non c'è Pip nella cartella/bin del ambiente:

$ ls env/bin activate activate.fish python python2 activate.csh activate_this.py python-config python2.7

E così mentre il sistema trova la versione di Python locale, non riesce a trovare un pip locale da utilizzare e traverse il $ PATH. Finì per usare pip da/usr/local/bin, lasciandomi incapace di installare pacchetti localmente nell'ambiente virtuale.

Ecco cosa ho provato: - reinstallazione di pitone brew uninstall python seguito da brew upgrade e brew install python --build-from-source - Installazione pip using the get-pip.py command as described in the Pip documentation

Ecco quello che ho escluso: - non stavo usando sudo pip ...which caused similar problems in this other question e non l'ho fatto in qualsiasi tempo su questa installazione Python/pip - Il mio ambiente virtuale non ha mostrato un'installazione locale di pip, come era il caso in queste domande simili: This one for Windows, This one for Mac OS X.

In definitiva, ho trovato che l'eliminazione del file ~/.pydistutils.cfg risolveva il problema, consentendo ambienti virtuali freschi con un proprio pip locale.Il contenuto del mio file ~/.pydistutils.cfg erano:

[global] 
verbose=1 

[install] 
install-scripts=$HOME/bin 

[easy_install] 
install-scripts=$HOME/bin 

semplicemente rinominando il file ~/.pydistutils.cfg sembra risolvere il problema: sembra che, anche se il file è stato creato con l'installazione homebrew, some settings in this file may be incompatible with virtualenv. Durante la rimozione di questo file non ha avuto effetti negativi sul mio sistema, potrebbe essere necessario utilizzare il flag --user quando si installano pacchetti con pip nell'ambiente globale (ad esempio $ pip install --user HTTPServer). Qui ci sono più details on .pydistutils.cfg se vuoi lavorare su misura per le tue esigenze.

+0

Grazie per la risposta completa! Volevo solo dire che non posso confermare la risposta, poiché non ho più esperienza del problema menzionato. Ho un nuovo computer e, per fortuna, non riesco a riprodurlo. Tuttavia, se qualcuno può confermare che questa soluzione funziona, approverò felicemente la tua risposta. – mikeonly

+0

Questo è assolutamente corretto. Ho rimosso il file ~/.pydistutils.cfg e tutti i miei problemi sono stati risolti. Grazie per aver riassunto un sacco di informazioni in una sola risposta. – carlosdc

+0

Non riesco a trovare il file '.pydistutils.cfg', usato' locate .pydistutils.cfg' ma non lo trovo, lo stesso errore e il debug mostra gli stessi problemi. Qualsiasi altra soluzione Sistema: Ubuntu – Vaulstein

0
  1. virtualenv eseguibile non è collocato in /usr/local/bin dopo pip fa il suo lavoro, quindi ho bisogno di ln -s a mano (si può indicare che c'è qualcosa di sbagliato con l'installazione su questo passaggio).

Non farlo. Ciò nasconderà il bug e non risolverà il problema. Ecco una breve guida su come eseguire il debug di questo tipo di problemi:

  • Inizia con which -a python. Il primo percorso visualizzato dovrebbe essere /usr/local/bin/python, in caso contrario controllare la variabile PATH.

  • Successivamente, selezionare which -a pip. Anche in questo caso il primo percorso dovrebbe essere /usr/local/bin/pip. In caso contrario, eseguire python -m ensurepip e ricontrollare.

  • Ora installare virtualenv utilizzando pip install virtualenv, quindi verificare l'uscita di which -a virtualenv. Il primo percorso deve essere /usr/local/bin/virtualenv, in caso contrario controllare l'output di env |grep PYTHON per le variabili di ambiente impreviste.

  • Infine controlla l'output di virtualenv --version per assicurarti di avere l'ultima versione.

+0

Controlla attentamente tutto ciò che hai detto. Tutto punta su '/ usr/local/bin/...' prima, così come 'virtualenv', che è alla versione 13.1.2. 'env' non mostra nulla relativo a' PYTHON', anche se sembra davvero un problema con le variabili d'ambiente. Ovunque da guardare? – mikeonly

+0

hai rimosso il collegamento simbolico creato in precedenza? Puoi reinstallare 'virtualenv' e aggiungere l'output che ottieni da' pip', anche l'output di 'virtualenv' quando crei una nuova venv. Inoltre puoi stampare i comandi che usi per attivare 'venv' e' echo $ PATH' dopo aver attivato il venv. – cel

+0

Symlink viene creato correttamente solo quando uso l'opzione '--isolated', rende' pip' il corretto generare 'virtualenv' in'/usr/local/bin'. L'uso di questo 'virtualenv' non dà ancora' pip' nel 'venv' creato. Ecco l'output: http://pastebin.com/BbG8Ytap – mikeonly

Problemi correlati