Ajouter en permanence un répertoire à PYTHONPATH

Chaque fois que j'utilise sys.path.append , le nouveau répertoire sera ajouté. Cependant, une fois que j'aurai fermé python, la liste reviendra à la précédente (par défaut?) valeur. Comment ajouter de façon permanente un répertoire à PYTHONPATH?

241
demandé sur Woot4Moo 2010-08-04 06:28:07

14 réponses

vous devez ajouter votre nouveau répertoire à la variable d'environnement PYTHONPATH , séparée par deux points du contenu précédent. Dans N'importe quelle forme D'Unix, vous pouvez le faire dans un script de démarrage approprié à n'importe quel shell que vous utilisez ( .profile ou n'importe quoi, selon votre shell préféré) avec une commande qui, encore une fois, dépend du shell en question; dans Windows, vous pouvez le faire à travers l'interface graphique du système à cette fin.

superuser.com peut être un meilleur endroit pour demander plus de détails, c'est-à-dire pour plus de détails si vous avez besoin de détails sur la façon d'enrichir une variable d'environnement dans votre plateforme et shell choisis, car ce n'est pas vraiment une question de programmation en soi.

105
répondu Alex Martelli 2010-08-04 02:33:07

si vous utilisez bash (sur un Mac ou GNU/Linux distro), ajoutez ceci à votre ~/.bashrc

export PYTHONPATH="${PYTHONPATH}:/my/other/path"
348
répondu awesomo 2015-05-15 18:29:40

au lieu de manipuler PYTHONPATH vous pouvez aussi créer un fichier de configuration de chemin . Trouvez d'abord dans quel répertoire Python recherche cette information:

python -m site --user-site

pour quelque raison cela ne semble pas fonctionner en python 2.7. Vous pouvez y utiliser:

python -c 'import site; site._script()' --user-site

puis créer un fichier .pth dans ce répertoire contenant le chemin que vous voulez ajouter (créer le répertoire s'il n'existe pas).

par exemple:

# find directory
SITEDIR=$(python -m site --user-site)

# create if it doesn't exist
mkdir -p "$SITEDIR"

# create new .pth file with our path
echo "$HOME/foo/bar" > "$SITEDIR/somelib.pth"
70
répondu sth 2013-12-15 19:21:05

cela fonctionne sur Windows

  1. sous Windows, avec Python 2.7 allez dans le dossier de configuration de Python.
  2. Ouvrir Lib/site-packages.
  3. Ajouter un exemple.la pth fichier vide à ce dossier.
  4. ajoute le chemin requis au fichier, un par ligne.

alors vous pourrez voir tous les modules dans ces chemins à partir de vos scripts.

23
répondu auserdude 2015-06-09 09:49:26

dans le cas où quelqu'un est encore confus - si vous êtes sur un Mac, faites ce qui suit:

  1. Ouvrir un Terminal
  2. Type open .bash_profile
  3. dans le fichier texte qui apparaît, ajouter cette ligne à la fin: export PYTHONPATH=$PYTHONPATH:foo/bar
  4. Enregistrer le fichier, redémarrez le Terminal, et vous êtes fait
19
répondu entrepaul 2012-09-14 18:19:00

vous pouvez ajouter le chemin via votre fichier pythonrc, qui par défaut est ~/.pythonrc sous linux. IE.

import sys
sys.path.append('/path/to/dir')

vous pouvez également définir la variable d'environnement PYTHONPATH , dans un fichier rc global, comme ~/.profile sur mac ou linux, ou via Panneau de configuration -> système -> onglet Avancé -> Variables d'environnement sur windows.

18
répondu Blue Peppers 2010-08-04 02:33:24

pour donner plus d'explications, Python construira automatiquement ses chemins de recherche (comme mentionné au-dessus de et ici ) en utilisant le script site.py (typiquement situé dans sys.préfixe + lib/python<version>/site-packages ainsi que lib/site-python ). On peut obtenir la valeur de sys.préfixe:

python -c 'import sys; print(sys.prefix)'

le site.py script ajoute ensuite un certain nombre de répertoires, dépendant de la plate-forme, tels que /usr/{lib,share}/python<version>/dist-packages , /usr/local/lib/python<version>/dist-packages pour le chemin de recherche et aussi recherche ces chemins pour les fichiers de configuration <package>.pth qui contiennent des chemins de recherche supplémentaires spécifiques. Par exemple easy-install maintient sa collection de paquets installés qui sont ajoutés à un fichier spécifique au système E. G on Ubuntu c'est /usr/local/lib/python2.7/dist-packages/easy-install.pth . Sur un système classique, il ya un tas de ces .la pth fichiers qui peuvent expliquer certains chemins inattendus dans sys.chemin d'accès:

python -c 'import sys; print(sys.path)'

So on peut créer une .PTH fichier et mis dans l'un de ces répertoires (y compris le sitedir comme mentionné ci-dessus ). Cela semble être la façon dont la plupart des paquets sont ajoutés au SAJR.path par opposition à l'utilisation du PYTHONPATH.

Note: sur OSX il y a un chemin de recherche supplémentaire spécial ajouté par site.py pour' framework builds ' (mais semble fonctionner pour une utilisation normale de python en ligne de commande): /Library/Python/<version>/site-packages (par exemple pour Python2.7: /Library/Python/2.7/site-packages/ ) qui est où tiers les paquets sont censés être installés (voir le README dans ce dir). On peut donc y ajouter un fichier de configuration de chemin contenant des chemins de recherche supplémentaires, par exemple créer un fichier appelé /Library/Python/2.7/site-packages/pip-usr-local.pth qui contient /usr/local/lib/python2.7/site-packages/ et ensuite le système python ajoutera ce chemin de recherche.

10
répondu Pierz 2018-10-02 10:04:12

sous linux, vous pouvez créer un lien symbolique à partir de votre paquet vers un répertoire de PYTHONPATH sans avoir à gérer les variables d'environnement. Quelque chose comme:

ln -s /your/path /usr/lib/pymodules/python2.7/
9
répondu Zah 2013-03-29 18:47:32

pour moi, ça a marché quand j'ai changé le fichier .bash_profile . Juste changer le fichier .bashrc n'a fonctionné que jusqu'à ce que je redémarre l'interpréteur de commandes.

pour python 2.7 il devrait ressembler à:

export PYTHONPATH="$PYTHONPATH:/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python"

à la fin du fichier .bash_profile .

9
répondu Peter Piper 2015-05-15 18:31:08

juste pour ajouter sur la réponse d'awesomo, vous pouvez également ajouter cette ligne dans votre ~/.bash_profile ou ~/.profile

5
répondu janex 2011-10-27 20:11:05

, Ajoutant que export PYTHONPATH="${PYTHONPATH}:/my/other/path" ~/.bashrc pourrait ne pas fonctionner si PYTHONPATH n'existe pas actuellement (en raison de la : ).

export PYTHONPATH="/my/other/path1"
export PYTHONPATH="${PYTHONPATH}:/my/other/path2"

ajoutant ce qui précède à mon~/.bashrc a fait le tour pour moi sur Ubuntu 16.04

3
répondu boyangeor 2018-02-21 20:30:47

j'ai ajouté en permanence dans Windows Vista, Python 3.5

Système > Panneau de Configuration > Paramètres Système avancés > Variables D'environnement avancées (tap) > variables système > (Si vous ne voyez pas PYTHONPATH dans la colonne Variable) (cliquez) nouveau > nom de la Variable: PYTHONPATH > valeur de la Variable:

s'il vous plaît, écrivez le répertoire dans la valeur Variable. Ce sont les détails de la réponse de Blue Peppers.

0
répondu Cloud Cho 2017-07-10 05:52:32

en python 3.6.4 vous pouvez persister sys.chemin à travers les sessions python comme ceci:

import sys
import os

print(str(sys.path))

dir_path = os.path.dirname(os.path.realpath(__file__))
print(f"current working dir: {dir_path}")

root_dir = dir_path.replace("/util", '', 1)
print(f"root dir: {root_dir}")

sys.path.insert(0, root_dir)

print(str(sys.path))

je vous suggère fortement d'utiliser virtualenv et virtualenvwrapper sinon vous encombrerez votre chemin""

0
répondu Rubber Duck 2018-03-01 09:25:30

le script ci-dessous fonctionne sur toutes les plateformes comme Python pur. Il utilise le chemin pathlib, documenté ici https://docs.python.org/3/library/pathlib.html , pour le faire fonctionner sur plusieurs plateformes. Vous exécutez une fois, redémarrez le noyau et c'est tout. Inspiré par https://medium.com/@arnaud.bertrand/modifying-python-s-search-path-with-pth-files-2a41a4143574 .

from pathlib import Path
to_add=Path(path_of_directory_to_add)
from sys import path

if str(to_add) not in path:
    minLen=999999
    for index,directory in enumerate(path):
        if 'site-packages' in directory and len(directory)<=minLen:
            minLen=len(directory)
            stpi=index

    pathSitePckgs=Path(path[stpi])
    with open(str(pathSitePckgs/'current_machine_paths.pth'),'w') as pth_file:
        pth_file.write(str(to_add))
0
répondu andrei deusteanu 2018-07-11 16:46:43