web-dev-qa-db-fra.com

Définir pythonpath avant les instructions d'importation

Mon code est:

import scriptlib.abc
import scriptlib.xyz

def foo():
  ... some operations

mais la scriptlib est dans un autre répertoire, je devrai donc l'inclure dans la variable d'environnement "PYTHONPATH".

Y a-t-il un moyen dans lequel je peux d'abord ajouter le répertoire scriptlib dans la variable d'environnement "PYTHONPATH" avant que l'instruction d'importation ne soit exécutée comme ceci:

import sys
sys.path.append('/mypath/scriptlib')
import scriptlib.abc
import scriptlib.xyz

def foo():
  ... some operations

Si tel est le cas, la valeur est-elle réservée à cette commande ou est-elle globale?

Merci d'avance

51
DKG

Ceci ajoutera un chemin à votre processus/instance Python (c.-à-d. L'exécutable en cours d'exécution). Le chemin ne sera modifié pour aucun autre processus Python en cours d'exécution. Python ne sera pas modifié, et si vous quittez votre programme et que vous le réexécutez, le chemin ne comprendra pas ce que vous avez ajouté auparavant. Ce que vous faites est généralement correct.

set.py:

import sys
sys.path.append("/tmp/TEST")

loop.py

import sys
import time
while True:
  print sys.path
  time.sleep(1)

lancer: python loop.py &

Cela exécutera loop.py, connecté à votre STDOUT, et continuera à fonctionner en arrière-plan. Vous pouvez ensuite exécuter python set.py. Chacun a un ensemble différent de variables d'environnement. Notez que la sortie de loop.py Ne change pas car set.py Ne modifie pas l'environnement de loop.py.

ne note sur l'importation

Les importations Python sont dynamiques, comme le reste du langage. Il n'y a pas de lien statique en cours. L'importation est une ligne exécutable, tout comme sys.path.append....

51
Joe

Comme indiqué dans la documentation ici .
Aller à Python X.X/Lib et ajoutez ces lignes au site.py Là,

import sys
sys.path.append("yourpathstring")

Cela change votre sys.path pour que sur chaque chargement, il ait cette valeur ..

Comme indiqué ici à propos de site.py,

Ce module est automatiquement importé lors de l'initialisation. L'importation de ce module ajoutera des chemins spécifiques au site du chemin de recherche du module et ajoutera quelques fonctions intégrées.

Pour d’autres méthodes possibles pour ajouter un chemin à sys.path voir ces documents

6
pradyunsg