Variable d'environnement PYTHONPATH

19

J'ai ceci dans mon ~/.profile:

export PYTHONPATH=/home/dev/python-files

Dans le python-filesrépertoire, j'ai quelques projets clonés à partir de git-hub (flask, courbeship et py-vgdl).

Chaque fois que j'essaie de démarrer l'un des exemples de ces projets, j'obtiens des erreurs similaires aux suivantes:

$ 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

Il me semble que je ne devrais pas avoir cette erreur car j'ai cette PYTHONPATHvariable d'environnement configurée?

Exécution de l'interpréteur interactif python:

>>> import os
>>> os.environ["PYTHONPATH"]
'/home/dev/python-files'
Jérôme
la source

Réponses:

35

Essayez d'ajouter à PYTHONPATH au lieu de l'écraser complètement.

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

Les références:

Selon la documentation Python sur PYTHONPATH

Augmentez le chemin de recherche par défaut pour les fichiers de module. [...]

Le chemin de recherche par défaut dépend de l'installation, mais commence généralement par prefix/lib/pythonversion(voir PYTHONHOMEci - dessus). Il est toujours ajouté à PYTHONPATH.

ce qui signifie que certaines valeurs existent PYTHONPATHet que le chemin de recherche par défaut est également ajouté uniquement.

De plus, ce billet de blog ( lien Archive.org ) explique également clairement pourquoi vous devez l'ajouter PYTHONPATHet ne pas l'écraser. Faire défiler la page jusqu'à la section - Cas spéciaux et examiner le chemin de recherche l' explique clairement (malheureusement, aucune URL relative à ce lien ne vous oblige à faire défiler). Bien que l'utilisateur donne les exemples sur un mac, ils sont très pertinents pour n'importe quelle plate-forme

Nitin Venkatesh
la source
1
@Garrett Merci :) Mis à jour avec le lien Archive.org.
Nitin Venkatesh
+1 pour le lien archive / stéréoplex. Il répond à tant de questions qu'il devrait figurer en première page des documents officiels de Python!
Malik A. Rumi
5

Vous pouvez également procéder comme suit:

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

pwd est le répertoire de travail actuel.

Mrudhvika Damaraju
la source
Attention, cela écrasera votre PYTHONPATH dans le processus! Si vous souhaitez ajouter pwd à votre PYTHONPATH:export PYTHONPATH=$PYTHONPATH:$(pwd)
jackw11111
4

PYTHONPATHdevrait indiquer où se trouvent vos packages et modules Python, et non où se trouvent vos extractions. En d'autres termes, si vous faites un, ls "$PYTHONPATH"vous devriez voir des *.pyfichiers ( modules Python ) et des répertoires contenant des __init__.pyfichiers ( packages Python ).

Donc, si vous voulez pouvoir import vgdl, votre PYTHONPATHdevrait ressembler à ceci:

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

parce que le vgdl paquet est à l'intérieur py-vgdl, pas à l'intérieur python-files.

Pour ajouter également les autres chemins, vous pouvez les utiliser :pour les séparer:

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

Cela fonctionnera en effet, cependant, dans de tels cas, l'utilisation PYTHONPATHpeut être trop complexe. Ce que je recommande est d'utiliser virtualenv, qui est fait exprès pour simplifier des situations comme la vôtre. Ce que vous devez faire, c'est essentiellement:

  1. Créez un environnement: virtualenv env
  2. «Activez-le»: source env/bin/activate
  3. Installez vos packages: cela peut être fait en utilisant pipou le setup.pyscript de vos packages.
  4. Prendre plaisir.

Je ne donne pas beaucoup d'informations car virtualenv est bien documenté et si vous avez besoin d'aide pour quelque chose, vous feriez mieux d'ouvrir une nouvelle question.

Andrea Corbellini
la source