Zmienna środowiskowa PYTHONPATH

19

Mam to w moim ~/.profile:

export PYTHONPATH=/home/dev/python-files

W python-fileskatalogu mam kilka projektów sklonowanych z git-hub (flask, curveship i py-vgdl).

Ilekroć próbuję uruchomić którykolwiek z przykładów w tych projektach, otrzymuję błędy podobne do następujących:

$ python ~/python-files/py-vgdl/examples/gridphysics/frogs.py 
Traceback (most recent call last):
    File "/home/dev/python-files/py-vgdl/examples/gridphysics/frogs.py", line 67, in <module>
        from vgdl.core import VGDLParser
ImportError: No module named vgdl.core

Wydaje mi się, że nie powinienem dostać tego błędu, ponieważ mam PYTHONPATHskonfigurowaną zmienną środowiskową?

Uruchamianie interaktywnego interpretera Pythona:

>>> import os
>>> os.environ["PYTHONPATH"]
'/home/dev/python-files'
jerome
źródło

Odpowiedzi:

35

Spróbuj dołączyć do PYTHONPATH zamiast całkowicie go zastąpić.

export PYTHONPATH=$PYTHONPATH:/home/dev/python-files

Bibliografia:

Zgodnie z dokumentacją Pythona dotyczącą PYTHONPATH

Rozszerz domyślną ścieżkę wyszukiwania plików modułów. [...]

Domyślna ścieżka wyszukiwania zależy od instalacji, ale zazwyczaj zaczyna się od prefix/lib/pythonversion(patrz PYTHONHOMEwyżej). Zawsze jest dołączane do PYTHONPATH.

co oznacza, że ​​istnieją pewne wartości, PYTHONPATHa domyślna ścieżka wyszukiwania jest również dołączana.

Ponadto ten post na blogu ( link Archive.org ) wyjaśnia również jasno, dlaczego należy go dołączyć, PYTHONPATHa nie zastąpić. Przewijanie w dół do sekcji - Przypadki specjalne i badanie ścieżki wyszukiwania wyjaśnia to jasno (niestety nie ma względnego adresu URL do tego linku, więc będziesz musiał przewijać). Chociaż użytkownik podaje przykłady na komputerze Mac, są one bardzo istotne dla każdej platformy

Nitin Venkatesh
źródło
1
@Garrett Dzięki :) Zaktualizowano linkiem Archive.org.
Nitin Venkatesh
+1 za link archiwum / stereopleks. Odpowiada na tak wiele pytań, jak powinno być na pierwszej stronie oficjalnych dokumentów Pythona!
Malik A. Rumi
5

Możesz także wykonać następujące czynności:

export PYTHONPATH=$(pwd) **or** export PYTHONPATH=${PWD}

pwd to obecny katalog roboczy.

Mrudhvika Damaraju
źródło
Uwaga, spowoduje to nadpisanie ścieżki PYTHONPATH! Jeśli chcesz dodać pwd do PYTHONPATH:export PYTHONPATH=$PYTHONPATH:$(pwd)
jackw11111
4

PYTHONPATHpowinien wskazywać, gdzie znajdują się twoje pakiety i moduły Pythona, a nie gdzie znajdują się kasy. Innymi słowy, jeśli to zrobisz ls "$PYTHONPATH", powinieneś zobaczyć *.pypliki ( moduły Python ) i katalogi zawierające __init__.pypliki ( pakiety Python ).

Tak więc, jeśli chcesz import vgdl, PYTHONPATHpowinieneś wyglądać tak:

PYTHONPATH=/home/dev/python-files/py-vgdl

ponieważ vgdl paczka jest w środku py-vgdl, a nie w środku python-files.

Aby dodać także inne ścieżki, możesz :je oddzielić:

PYTHONPATH="/home/dev/python-files/py-vgdl:/home/dev/python-files/something:$PYTHONPATH"

To rzeczywiście zadziała, jednak w takich przypadkach używanie PYTHONPATHmoże być zbyt skomplikowane. To, co zalecam, to użycie virtualenv, które zostało stworzone specjalnie w celu uproszczenia sytuacji takich jak Twoja. To, co musisz zrobić, to w zasadzie:

  1. Utwórz środowisko: virtualenv env
  2. „Aktywuj” to: source env/bin/activate
  3. Zainstaluj swoje pakiety: można to zrobić za pomocą piplub setup.pyskryptu swoich pakietów.
  4. Cieszyć się.

Nie udzielam wielu informacji, ponieważ virtualenv jest dobrze udokumentowany i jeśli potrzebujesz pomocy, lepiej otwórz nowe pytanie.

Andrea Corbellini
źródło