Variabile d'ambiente PYTHONPATH


19

Ho questo nel mio ~/.profile:

export PYTHONPATH=/home/dev/python-files

Nella python-filesdirectory, ho alcuni progetti clonati da git-hub (flask, curveship e py-vgdl).

Ogni volta che provo ad avviare uno degli esempi in questi progetti, ottengo errori simili ai seguenti:

$ 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

Mi sembra che non dovrei ricevere questo errore perché ho PYTHONPATHimpostato quella variabile ambientale?

Esecuzione dell'interprete interattivo python:

>>> import os
>>> os.environ["PYTHONPATH"]
'/home/dev/python-files'

Risposte:


35

Prova ad aggiungere a PYTHONPATH invece di sovrascriverlo completamente.

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

Riferimenti:

Secondo la documentazione di Python su PYTHONPATH

Aumenta il percorso di ricerca predefinito per i file del modulo. [...]

Il percorso di ricerca predefinito dipende dall'installazione, ma generalmente inizia con prefix/lib/pythonversion(vedi PYTHONHOMEsopra). Viene sempre aggiunto PYTHONPATH.

nel senso che esistono alcuni valori PYTHONPATHe viene aggiunto solo il percorso di ricerca predefinito.

Inoltre, questo post sul blog ( link Archive.org ) spiega chiaramente perché è necessario accodarsi PYTHONPATHe non sovrascriverlo. Scorrendo verso il basso fino alla sezione - Casi speciali ed esaminando il percorso di ricerca lo spiega chiaramente (sfortunatamente nessun URL relativo a quel link quindi dovrai scorrere). Sebbene l'utente fornisca gli esempi su un Mac, sono molto rilevanti per qualsiasi piattaforma


1
@Garrett Grazie :) Aggiornato con il collegamento Archive.org.
Nitin Venkatesh,

+1 per il collegamento archivio / stereoplex. Risponde a tante domande che dovrebbe essere sulla prima pagina dei documenti ufficiali di Python!
Malik A. Rumi,

5

Puoi anche fare come segue:

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

pwd è l'attuale directory di lavoro.


Attenzione, questo sovrascriverà il tuo PYTHONPATH nel processo! Se vuoi aggiungere pwd al tuo PYTHONPATH:export PYTHONPATH=$PYTHONPATH:$(pwd)
jackw11111

4

PYTHONPATHdovrebbe indicare dove sono i tuoi pacchetti e moduli Python, non dove sono i tuoi checkout. In altre parole, se lo fai ls "$PYTHONPATH"dovresti vedere *.pyfile ( moduli Python ) e directory contenenti __init__.pyfile ( pacchetti Python ).

Quindi, se vuoi essere in grado import vgdl, PYTHONPATHdovresti apparire così:

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

perché il vgdl pacchetto è dentro py-vgdl, non dentro python-files.

Per aggiungere anche altri percorsi, è possibile utilizzare :per separarli:

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

Questo funzionerà davvero, tuttavia, per tali casi, l'utilizzo PYTHONPATHpotrebbe essere troppo complesso. Quello che consiglio è di usare virtualenv, che è fatto apposta per semplificare situazioni come la tua. Quello che devi fare è fondamentalmente:

  1. Crea un ambiente: virtualenv env
  2. 'Attivalo': source env/bin/activate
  3. Installa i tuoi pacchetti: questo potrebbe essere fatto usando pipo lo setup.pyscript dei tuoi pacchetti.
  4. Godere.

Non sto fornendo molte informazioni perché virtualenv è ben documentato e se hai bisogno di aiuto con qualcosa, è meglio aprire una nuova domanda.

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.