Come si imposta il proprio percorso python in un virtualenv già creato?


106

Quale file devo modificare e come? Ho creato un ambiente virtuale.


controlla che punti alle directory corrette. Se non ne hai già uno, fai clic sul pulsante Nuovo e crealo.

11
Usa il comando add2virtualenv .
s29

5
add2virtualenv è un virtualenvwrappercomando. Non fa parte di virtualenv.
kojiro

Risposte:


124

MODIFICA # 2

La risposta giusta è quella di @ arogachev .


Se vuoi cambiare l' PYTHONPATHusato in un virtualenv, puoi aggiungere la seguente riga al bin/activatefile del tuo virtualenv :

export PYTHONPATH="/the/path/you/want"

In questo modo, il nuovo PYTHONPATHverrà impostato ogni volta che usi questo virtualenv.

EDIT: (per rispondere al commento di @ RamRachum)

Per riportarlo al suo valore originale deactivate, potresti aggiungere

export OLD_PYTHONPATH="$PYTHONPATH"

prima della riga menzionata in precedenza e aggiungi la riga seguente al tuo bin/postdeactivatescript.

export PYTHONPATH="$OLD_PYTHONPATH"

1
Sarà anche rimosso deactivate?
Ram Rachum

1
Quindi questo significa che un ambiente virtuale appena creato ha il percorso predefinito PYTHONPATH(quello globale) invece del percorso locale virtualenv?
ducin

6
Questo ha funzionato molto bene per me, non sto usando virtualenvwrapper. L'unica nota è che non avevo questo script bin / postdeactivate, rathere activation aveva una funzione di disattivazione. La riga di codice quindi dovrebbe essere inserita lì, facendo attenzione a racchiuderla in un'istruzione if come il resto delle operazioni nella funzione.
Niccolò

2
Sembra strano che virtualenv non lo faccia per impostazione predefinita.
Seth

2
La modifica n. 2 è una bugia! :) La risposta giusta è quella di @ arjen-p-de-vries
Berriel

73

Il commento di @ s29 dovrebbe essere una risposta:

Un modo per aggiungere una directory all'ambiente virtuale è installare virtualenvwrapper (che è utile per molte cose) e poi fare

mkvirtualenv myenv
workon myenv
add2virtualenv . #for current directory
add2virtualenv ~/my/path

Se vuoi rimuovere questi percorsi, modifica il file myenvhomedir/lib/python2.7/site-packages/_virtualenv_path_extensions.pth

La documentazione su virtualenvwrapper può essere trovata su http://virtualenvwrapper.readthedocs.org/en/latest/

La documentazione specifica su questa funzione può essere trovata su http://virtualenvwrapper.readthedocs.org/en/latest/command_ref.html?highlight=add2virtualenv


6
da rimuovere:add2virtualenv -d
teca il

1
ho appena collegato questa risposta alla mia, poiché è molto meglio
mdeous

27

È possibile creare un .pthfile che contenga la directory da cercare e posizionarlo nella site-packagesdirectory. Per esempio:

cd $(python -c "from distutils.sysconfig import get_python_lib; print(get_python_lib())")
echo /some/library/path > some-library.pth

L'effetto è lo stesso come l'aggiunta /some/library/pathdi sys.path, e rimanere locale alla virtualenvconfigurazione.


7
Mi piace molto questo approccio; non così volubile come l'aggiunta di linee per attivare / disattivare e non richiede l'uso di virtualenvwrapper. Se preferisci non invocare python per trovare la directory site-packages, è nel percorso abbastanza prevedibile $VIRTUALENV_ROOT/lib/pythonX.Y/site-packages. Documenti sui file .pth: docs.python.org/3.6/library/site.html
Alec

2
Non volevo digitare un percorso assoluto, perché i miei spazi di lavoro si muovono nel mio filesystem. E il mio percorso progettuale ha degli spazi. Quindi, ho digitato il comando leggermente modificato: pushd "$(venv/bin/python -c "from distutils.sysconfig import get_python_lib; print(get_python_lib())")" ...path/to/project/venv/lib/python3.7/site-packages ...path/to/project echo ../../../../src > my_project.pth popdQuindi ho disattivato il mio virtualenv e ho riattivato. Ora potevo eseguire il codice del progetto che richiedeva di sapere dove si trovava la directory del mio progetto.
Jim DeLaHunt,

4
Questa è la risposta corretta. La modifica dello script fornito dal fornitore ( /bin/activate) è un malcostume e l'installazione di strumenti di terze parti è inferiore rispetto all'utilizzo del metodo integrato per ottenere lo stesso risultato.
Red

2
  1. Inizializza il tuo virtualenv
cd venv

source bin/activate
  1. Basta impostare o modificare il percorso python immettendo il comando seguente:
export PYTHONPATH='/home/django/srmvenv/lib/python3.4'
  1. per controllare il percorso di python inserisci in python:
   python

      \>\> import sys

      \>\> sys.path

1

Ho modificato il mio script di attivazione per generare il file .virtualenvrc, se esiste nella directory corrente, e per salvare / ripristinare all'attivazione PYTHONPATH/ disattivazione.

Puoi trovare lo activatescript corretto qui. . È un sostituto immediato per lo script di attivazione creato da virtualenv 1.11.6.

Quindi ho aggiunto qualcosa del genere al mio .virtualenvrc:

export PYTHONPATH="${PYTHONPATH:+$PYTHONPATH:}/some/library/path"

-20

La risposta è già qui -> Il mio ambiente virtuale (python) sta causando la rottura del mio PYTHONPATH?

UNIX / LINUX

Aggiungi "export PYTHONPATH = / usr / local / lib / python2.0" al file ~ / .bashrc e procuralo digitando "source ~ / .bashrc" OR ". ~ / .Bashrc".

WINDOWS XP

1) Vai al pannello di controllo 2) Fare doppio clic su Sistema 3) Vai alla scheda Avanzate 4) Fare clic su Variabili d'ambiente

Nella finestra Variabili di sistema, controlla se hai una variabile chiamata PYTHONPATH. Se ne hai già uno, controlla che punti alle directory giuste. Se non ne hai già uno, fai clic sul pulsante Nuovo e crealo.

CODICE PYTHON

In alternativa, puoi anche fare sotto il tuo codice: -

import sys
sys.path.append("/home/me/mypy") 

4
-1: indirizza PYTHONPATH dell'utente, non PYTHONPATH di virtualenv.
twneale
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.