Variable d’environnement PYTHONPATH

J’ai ceci dans mon ~/.profile :

 export PYTHONPATH=/home/dev/python-files 

Dans le répertoire python-files , j’ai quelques projets clonés à partir de git-hub (flask, curvehip et py-vgdl).

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

 $ 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  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 variable d’environnement PYTHONPATH configurée?

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

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

Essayez d’append à 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 le prefix/lib/pythonversion (voir PYTHONHOME ci-dessus). Il est toujours ajouté à PYTHONPATH .

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

De plus, cet article de blog ( lien Archive.org ) explique clairement pourquoi vous devez append à PYTHONPATH et non l’écraser. Faire défiler la liste 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

PYTHONPATH doit indiquer où se trouvent vos packages et modules Python, et non pas où se trouvent vos extractions. En d’autres termes, si vous faites un ls "$PYTHONPATH" vous devriez voir les fichiers *.py ( modules Python ) et les répertoires contenant les fichiers __init__.py ( paquets Python ).

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

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

parce que le paquet vgdl trouve dans py-vgdl , et non dans python-files .

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

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

Cela fonctionnera cependant dans de tels cas, l’utilisation de PYTHONPATH peut s’avérer trop complexe. Ce que je recommande, c’est d’utiliser virtualenv , qui est conçu express pour simplifier des situations comme la vôtre. Ce que vous devez faire est fondamentalement:

  1. Créer un environnement: virtualenv env
  2. ‘Activer’ le: source env/bin/activate
  3. Installez vos paquets: vous pouvez le faire en utilisant pip ou le script setup.py de vos paquets.
  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 de poser une nouvelle question

Vous pouvez également faire ce qui suit:

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

pwd est le répertoire de travail actuel.