Jak ustawić pythonpath w już utworzonym virtualenv?

108

Który plik mam edytować i jak? Stworzyłem wirtualne środowisko.

TIMEX
źródło
sprawdź, czy wskazuje na właściwe katalogi. Jeśli jeszcze go nie masz, kliknij przycisk Nowy i utwórz go.
11
Użyj polecenia add2virtualenv .
s29
5
add2virtualenv to virtualenvwrapperpolecenie. Nie jest częścią virtualenv.
kojiro,

Odpowiedzi:

125

EDYCJA # 2

Prawidłowa odpowiedź brzmi: @ arogachev .


Jeśli chcesz zmienić PYTHONPATHużywane w virtualenv, możesz dodać następujący wiersz do bin/activatepliku virtualenv :

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

W ten sposób nowy PYTHONPATHzostanie ustawiony za każdym razem, gdy użyjesz tego virtualenv.

EDYCJA: (aby odpowiedzieć na komentarz @ RamRachum)

Aby przywrócić pierwotną wartość w dniu deactivate, możesz dodać

export OLD_PYTHONPATH="$PYTHONPATH"

przed wspomnianą wcześniej linią i dodaj następujący wiersz do swojego bin/postdeactivateskryptu.

export PYTHONPATH="$OLD_PYTHONPATH"
mdeous
źródło
1
Czy zostanie również usunięty deactivate?
Ram Rachum
1
Czy to oznacza, że ​​nowo utworzone środowisko wirtualne ma domyślną PYTHONPATH(globalną) zamiast ścieżki lokalnej virtualenv?
książę
6
To działało bardzo dobrze dla mnie, nie używam virtualenvwrapper. Należy tylko zauważyć, że nie miałem takiego skryptu bin / postdeactivate, chociaż tutaj aktywowano funkcję dezaktywacji. W związku z tym wiersz kodu powinien zostać tam umieszczony, uważając, aby zawinąć go w instrukcję if, tak jak pozostałe operacje w funkcji.
Niccolò,
2
Wydaje się dziwne, że virtualenv nie robi tego domyślnie.
Seth
2
Edycja nr 2 to kłamstwo! :) Prawidłowa odpowiedź brzmi: @ arjen-p-de-vries
Berriel.
73

Odpowiedź @ s29 powinna być odpowiedzią:

Jednym ze sposobów dodania katalogu do środowiska wirtualnego jest zainstalowanie virtualenvwrapper (co jest przydatne do wielu rzeczy), a następnie wykonanie

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

Jeśli chcesz usunąć te ścieżki, edytuj plik myenvhomedir/lib/python2.7/site-packages/_virtualenv_path_extensions.pth

Dokumentację na temat virtualenvwrapper można znaleźć pod adresem http://virtualenvwrapper.readthedocs.org/en/latest/

Szczegółową dokumentację dotyczącą tej funkcji można znaleźć pod adresem http://virtualenvwrapper.readthedocs.org/en/latest/command_ref.html?highlight=add2virtualenv

tjb
źródło
6
usunąć:add2virtualenv -d
thecheech
1
właśnie połączyłem tę odpowiedź w mojej, ponieważ jest o wiele lepsza
mdeous
27

Możesz utworzyć .pthplik zawierający katalog do wyszukania i umieścić go w site-packageskatalogu. Na przykład:

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

Efekt jest taki sam, jak dodanie /some/library/pathdo konfiguracji sys.pathi pozostaje lokalny w stosunku do virtualenvkonfiguracji.

Arjen P. De Vries
źródło
7
Naprawdę podoba mi się to podejście; nie jest tak zmienny jak dodawanie linii do aktywacji / dezaktywacji i nie wymaga używania virtualenvwrapper. Jeśli wolisz nie wywoływać języka Python w celu znalezienia katalogu pakietów witryn, znajduje się on na dość przewidywalnej ścieżce $VIRTUALENV_ROOT/lib/pythonX.Y/site-packages. Dokumenty w plikach .pth: docs.python.org/3.6/library/site.html
Alec,
2
Nie chciałem wpisywać bezwzględnej ścieżki, ponieważ moje obszary robocze poruszają się po moim systemie plików. Moja ścieżka projektu zawiera spacje. Tak więc wpisałem nieco zmodyfikowane polecenie: 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 popdNastępnie dezaktywowałem virtualenv i reaktywowałem. Mogłem teraz uruchomić kod projektu, który wymagał znajomości katalogu mojego projektu.
Jim DeLaHunt
4
To jest poprawna odpowiedź. Modyfikowanie skryptu dostarczonego przez dostawcę ( /bin/activate) jest błędem w sztuce, a instalowanie narzędzi innych firm jest gorsze od korzystania z wbudowanych sposobów, aby osiągnąć to samo.
Red
2
  1. Zainicjuj swój virtualenv
cd venv

source bin/activate
  1. Po prostu ustaw lub zmień ścieżkę Pythona, wprowadzając następujące polecenie:
export PYTHONPATH='/home/django/srmvenv/lib/python3.4'
  1. do sprawdzania ścieżki w Pythonie wprowadź w pythonie:
   python

      \>\> import sys

      \>\> sys.path
Siyaram Malav
źródło
1

Zmodyfikowałem mój skrypt aktywacji, aby pozyskiwał plik .virtualenvrc, jeśli istnieje w bieżącym katalogu, i aby zapisywał / przywracał PYTHONPATHprzy aktywacji / dezaktywacji.

Możesz znaleźć poprawiony activateskrypt tutaj.. Jest to bezpośredni zamiennik skryptu aktywacyjnego utworzonego przez virtualenv 1.11.6.

Następnie dodałem coś takiego do mojego .virtualenvrc:

export PYTHONPATH="${PYTHONPATH:+$PYTHONPATH:}/some/library/path"
André Laszlo
źródło
-20

Tutaj już odpowiedź -> Czy moje środowisko wirtualne (Python) powoduje uszkodzenie PYTHONPATH?

UNIX / LINUX

Dodaj „export PYTHONPATH = / usr / local / lib / python2.0” do pliku ~ / .bashrc i zródłaj go wpisując „source ~ / .bashrc” OR ”. ~ / .Bashrc”.

WINDOWS XP

1) Przejdź do Panelu sterowania 2) Kliknij dwukrotnie System 3) Przejdź do zakładki Zaawansowane 4) Kliknij Zmienne środowiskowe

W oknie Zmienne systemowe sprawdź, czy masz zmienną o nazwie PYTHONPATH. Jeśli już go masz, sprawdź, czy wskazuje na właściwe katalogi. Jeśli jeszcze go nie masz, kliknij przycisk Nowy i utwórz go.

KOD PYTHON

Alternatywnie możesz również zrobić poniżej swojego kodu: -

import sys
sys.path.append("/home/me/mypy") 
Ravikiran
źródło
4
-1: dotyczy PYTHONPATH użytkownika, a nie PYTHONPATH virtualenv.
twneale