2013-10-19 14 views
55

Si tenta di distribuire un pacchetto Python con pip in un ambiente virtuale su una macchina Ubuntu, ma si verifica un problema relativo alle autorizzazioni. Ad esempio:Come evitare "Autorizzazione negata" quando si utilizza pip con virtualenv

(TestVirtualEnv)[email protected]:~$ pip install markdown2 

termina con:

error: could not create '/home/test/virtualenvs/TestVirtualEnv/lib/python3.3/site-packages/markdown2.py': Permission denied

non posso sudo, dal momento che installare il pacchetto globalmente e non all'interno dell'ambiente virtuale. I chown ed site-packages; ls mostra solo le directory relative a easy_install, pip e setuptools e nulla correlato a Markdown.

Come distribuire un pacchetto in un ambiente virtuale con pip senza incontrare errori relativi alle autorizzazioni?

+0

Giusto per chiarire: hai creato questo virtualenv con 'sudo'? –

+0

@sebastian_oe: I * credo * l'ho fatto. Ne ricreterò uno per esserne sicuro. –

+2

Quindi questo potrebbe essere il problema. Prova a creare un virtualenv senza 'sudo'. –

risposta

67

virtualenv problemi di permessi potrebbero verificarsi quando si crea il virtualenv come sudo e quindi operare senza sudo nel virtualenv.

Come scoperto nel commento di tua domanda, la soluzione è quella di creare il virtualenv senza sudo essere in grado di lavoro (esp. Scrittura) in esso senza sudo.

+2

se voglio crearlo in/opt che richiede sudo, penso virtualenv non si installerà senza sudo. – Neutralizer

+3

@sebastian_oe Penso di amarti – AndrewK

+3

Come creare il 'virtualenv' senza sudo? – Tunn

3

Non ho creato il mio virtualenv utilizzando sudo. Quindi la risposta di Sebastian non si applicava a me. Il mio progetto si chiama utils. Ho controllato utils directory e ho visto questo:

-rw-r--r-- 1 macuser staff 983 6 Jan 15:17 README.md 
drwxr-xr-x 6 root  staff 204 6 Jan 14:36 utils.egg-info 
-rw-r--r-- 1 macuser staff 31 6 Jan 15:09 requirements.txt 

Come si può vedere, è di proprietà di utils.egg-inforoot non macuser. Questo è il motivo per cui mi ha dato l'errore permission denied. Ho anche dovuto rimuovere /Users/macuser/.virtualenvs/armoury/lib/python2.7/site-packages/utils.egg-link come è stato creato da root pure. Ho fatto pip install -e . di nuovo dopo aver rimosso quelli, e ha funzionato.

56

Soluzione:

Se è stato creato il virtualenv come root, eseguire il seguente comando:

sudo chown -R your_username:your_username path/to/virtuaelenv/ 

Questo sarà probabilmente risolvere il problema.

Acclamazioni

+0

Questo ha funzionato per me (chown /usr/local/lib/python3.4), eccetto che non penso Avevo creato una virtualenv come root, in realtà avevo installato Python3.4 come root. Sto ancora testando, ma pensi che mi imbatterò in altri problemi con questa soluzione, o questo chown risolverà la maggior parte degli errori? – ntk4

+0

Come fai a sapere se hai creato virtualenv o python come root? –

2

Nel mio caso, stavo usando mkvirtualenv, ma non ho detto che stavo per essere utilizzando python3. Ho ottenuto questo errore:

mkvirtualenv hug 
pip3 install hug -U 

.... 
error: could not create '/usr/lib/python3.4/site-packages': Permission denied 

Ha funzionato dopo aver specificato python3:

mkvirtualenv --python=/usr/bin/python3 hug 
pip3 install hug -U 
0

È non ha attivato l'ambiente virtuale prima di utilizzare pip.

Da provare con:

$(your venv path) . bin/activate 

e quindi utilizzare pip -r requirements.txt sulla cartella principale

0

Durante la creazione virtualenv se si utilizza sudo la directory viene creata con privileges.So root quando si prova ad installare un pacchetto con utente non-sudo che non avrai il permesso di installare in esso. Quindi crea sempre virtualenv senza sudo e installa senza sudo.

È anche possibile copiare i pacchetti installati su python globale su virtualenv.

cp -r /lib/python/site-packages/* virtualenv/lib/python/site-packages/ 
+0

Questo non era il problema: se leggevi i commenti, l'OP aveva creato l'ambiente virtuale con sudo in primo luogo. – Nick

Problemi correlati