Comment modifier globalement le PYTHONPATH par défaut (sys.path)?

33

Sur un système Ubuntu (10.10), j'ai un package Python qui s'installe dans /usr/local/lib/python2.6/site-packages/. Ce n'est pas contenu dans le chemin par défaut (sys.path). Comment ajouter ce répertoire au chemin?

La définition de la $PYTHONPATHvariable d'environnement est une solution, bien sûr, mais je cherche un moyen plus élégant de le faire. Par exemple, easy_instally place également des packages installés, mon sys.path ressemble à ceci:

['', '/usr/local/lib/python2.6/dist-packages/keyring-0.5.1-py2.6.egg', 
'/usr/lib/python2.6', '/usr/lib/python2.6/plat-linux2', '/usr/lib/python2.6/lib-tk',  
'/usr/lib/python2.6/lib-old', '/usr/lib/python2.6/lib-dynload', 
'/usr/local/lib/python2.6/dist-packages', '/usr/lib/python2.6/dist-packages', 
'/usr/lib/python2.6/dist-packages/PIL', '/usr/lib/pymodules/python2.6', 
'/usr/lib/pymodules/python2.6/gtk-2.0']

donc le chemin n'est évidemment pas celui par défaut intégré au binaire Python.

Existe-t-il un seul fichier de configuration contenant les entrées ci-dessus? Ou de quelle manière est-il possible de le modifier?

Latanius
la source

Réponses:

27

La documentation du module de site et la modification du chemin de recherche de Python semblent être ce que vous recherchez.

Si je comprends bien, ces entrées sont ajoutées sys.pathpar:

  • /usr/lib/python2.6/site.py
  • /usr/lib/python2.6/dist-packages/site.py
    (Changez 2.6 pour votre version de Python.)

Le moyen le plus simple de le modifier consiste à ajouter un fichier /usr/local/lib/python2.6/dist-packages/site-packages.pthcontenant ../site-packages.

Alternativement, vous pouvez peut-être apprendre à utiliser le package site.getsitepackages()?

Mikel
la source
1
merci, fonctionne parfaitement :) (J'ai fini par ajouter un fichier .pth à /usr/local/python2.6/dist-packages, contenant "../site-packages")
Latanius
1
Vous pouvez également créer un module appelé sitecustomize.pyqui site.pyessaie d'y importer et de le modifier sys.path.
TestUser16418
5

Vous pouvez créer un nouveau fichier appelé /etc/profile.d/local_python.shavec le contenu

PYTHONPATH="/usr/local/lib/python2.6/site-packages/":"${PYTHONPATH}"
export PYTHONPATH

Ce qui définira la PYTHONPATHvariable pour tous les utilisateurs connectés sur votre système.

TestUser16418
la source
7
Ce n'est vraiment pas universel. Le mécanisme /etc/profile.d ne fonctionnera que pour les shells de connexion pour les personnes ayant des shells qui utilisent /etc/profile.d (bash / ksh / zsh). Je suis sûr que les utilisateurs de csh ne verront pas ce changement. En outre, sera ignoré dans les tâches cron / at.
Rich Homolka
2
c'est une belle façon de définir des variables d'environnement globales (encore une autre chose que j'ai apprise aujourd'hui), mais comme je l'ai mentionné dans le post, je cherchais une manière plus
pythonique
4

Je voudrais résumer mes conclusions sur la modification du chemin de python. Il y a deux façons de procéder.

  • fichier .pth
  • PYTHONPATH

Tout fichier .pth qui se trouve sur le chemin par défaut (voir ci-dessous) verra son contenu inclus sys.path. Le format dudit fichier .pth est simple: un chemin (dossier) par ligne. Étonnamment, les chemins peuvent être absolus ou relatifs au fichier .pth .

Le chemin par défaut est l'endroit où réside l'interpréteur et <some-prefix>/lib/python<version>/site-packagesoù il se <some-prefix>trouve généralement /usr/.

PYTHONPATHest la variable d'environnement de votre système d'exploitation. Sur les systèmes Unix, vous les répertoriez par env. La modification globale de ces variables se fait via des scripts .sh dans le /etc/profile.d/dossier comme mentionné par @ TestUser16418.

katomaso
la source
2
C'est PYTHONPATH sans "_"
heroxbd
1

Par exemple, si vous souhaitez importer le sudsmodule disponible sous forme de .eggfichier:

egg_path = '/home/shahid/suds_2.4.egg'

sys.path.append(egg_path)

import suds
# ... rest of code
Mohammad Shahid Siddiqui
la source