web-dev-qa-db-fra.com

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

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

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

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

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

Références:

Selon le 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 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é.

En outre, cet article de blog ( lien Archive.org ) explique également clairement pourquoi vous devez ajouter à PYTHONPATH et ne pas l'écraser. Faites défiler la section - dans des cas spéciaux et examinez le chemin de recherche 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

30
Nitin Venkatesh

Vous pouvez également faire ce qui suit:

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

pwd est le répertoire de travail actuel.

4
Mrudhvika Damaraju

PYTHONPATH doit indiquer où se trouvent vos packages et modules Python, pas ceux où sont effectuées vos extractions. En d’autres termes, si vous faites un ls "$PYTHONPATH", vous devriez voir les fichiers *.py ( 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 package vgdl se trouve à l'intérieur de py-vgdl, et non de python-files.

Pour ajouter é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, utiliser PYTHONPATH peut être trop complexe. Ce que je recommande, c’est d’utiliser virtualenv , créé exprès pour simplifier des situations comme la vôtre. Ce que vous devez faire est fondamentalement:

  1. Créez un environnement: virtualenv env
  2. Activez-le: source env/bin/activate
  3. Installez vos packages: vous pouvez utiliser soit pip, soit le script setup.py de vos packages.
  4. Prendre plaisir.

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

3
Andrea Corbellini