Chaque fois que j'utilise sys.path.append
, le nouveau répertoire sera ajouté. Cependant, une fois que je ferme python, la liste reviendra aux valeurs précédentes (par défaut?). Comment ajouter définitivement un répertoire à PYTHONPATH
?
Chaque fois que j'utilise sys.path.append
, le nouveau répertoire sera ajouté. Cependant, une fois que je ferme python, la liste reviendra aux valeurs précédentes (par défaut?). Comment ajouter définitivement un répertoire à PYTHONPATH
?
Réponses:
Vous devez ajouter votre nouveau répertoire à la variable d'environnement PYTHONPATH
, séparé par deux points du contenu précédent de celle-ci. Dans n'importe quelle forme d'Unix, vous pouvez le faire dans un script de démarrage approprié au shell que vous utilisez ( .profile
ou quoi que ce soit, 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 via l'interface graphique du système à cet effet.
superuser.com
peut être un meilleur endroit pour demander plus, 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 la plate-forme et le shell de votre choix, car ce n'est pas vraiment une question de programmation en soi.
Si vous utilisez bash (sur une distribution Mac ou GNU / Linux), ajoutez ceci à votre ~/.bashrc
export PYTHONPATH="${PYTHONPATH}:/my/other/path"
~/.bashrc
puis exécutez source ~/.bashrc
voir stackoverflow.com/questions/2518127/…
sudo su
au début de votre fichier .bashrc. Ce message est d'accord avec moi. Sur mon système, au moins, ce n'est même pas nécessaire.
Au lieu de manipuler, PYTHONPATH
vous pouvez également créer un fichier de configuration de chemin . Découvrez d'abord dans quel répertoire Python recherche ces informations:
python -m site --user-site
Pour une raison quelconque, cela ne semble pas fonctionner dans Python 2.7. Là, vous pouvez utiliser:
python -c 'import site; site._script()' --user-site
Créez ensuite un .pth
fichier dans ce répertoire contenant le chemin que vous souhaitez ajouter (créez 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"
python -m site --user-site
et les (create the directory if it doesn't exist)
parties étaient ce que je manque à la faire fonctionner.
somelib.pth
? Sinon, devinez pourquoi cela pourrait ne pas fonctionner?
Cela fonctionne sous Windows
Ensuite, vous pourrez voir tous les modules dans ces chemins à partir de vos scripts.
Si quelqu'un est toujours confus - si vous êtes sur un Mac, procédez comme suit:
open .bash_profile
export PYTHONPATH=$PYTHONPATH:foo/bar
export
clé était la chose qui me manquait !!!!, a voté, merci beaucoup!
Vous pouvez ajouter le chemin via votre fichier pythonrc, qui est par défaut ~ / .pythonrc sous linux. c'est à dire.
import sys
sys.path.append('/path/to/dir')
Vous pouvez également définir la PYTHONPATH
variable d'environnement, dans un fichier rc global, tel que ~/.profile
sur mac ou linux, ou via le Panneau de configuration -> Système -> onglet Avancé -> Variables d'environnement sur Windows.
Pour donner un peu plus d'explications, Python construira automatiquement ses chemins de recherche (comme mentionné ci - dessus et ici ) en utilisant le site.py
script (généralement situé dans sys.prefix + lib/python<version>/site-packages
aussi lib/site-python
). On peut obtenir la valeur de sys.prefix:
python -c 'import sys; print(sys.prefix)'
Le script site.py ajoute ensuite un certain nombre de répertoires, en fonction de la plate-forme, par exemple /usr/{lib,share}/python<version>/dist-packages
, /usr/local/lib/python<version>/dist-packages
au chemin de recherche et recherche également dans ces chemins des <package>.pth
fichiers de configuration qui contiennent des chemins de recherche supplémentaires spécifiques. Par exemple, easy-install conserve sa collection de packages installés qui sont ajoutés à un fichier spécifique au système, par exemple sur Ubuntu c'est /usr/local/lib/python2.7/dist-packages/easy-install.pth
. Sur un système typique, il y a un tas de ces fichiers .pth autour qui peuvent expliquer certains chemins inattendus dans sys.path:
python -c 'import sys; print(sys.path)'
Ainsi, on peut créer un fichier .pth et mettre 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 packages sont ajoutés au sys.path au lieu d'utiliser le PYTHONPATH.
Remarque: Sur OSX, il y a un chemin de recherche supplémentaire spécial ajouté par site.py pour les `` builds de framework '' (mais semble fonctionner pour une utilisation normale de la ligne de commande de python): /Library/Python/<version>/site-packages
(par exemple pour Python2.7:) /Library/Python/2.7/site-packages/
qui est où les packages tiers sont supposés à installer (voir le fichier README dans ce répertoire). 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/
, puis le système python ajoutera ce chemin de recherche.
Pour moi, cela a fonctionné lorsque j'ai changé le .bash_profile
fichier. Le simple changement de .bashrc
fichier ne fonctionnait que jusqu'à ce que je redémarre le shell.
Pour python 2.7, il devrait ressembler à ceci:
export PYTHONPATH="$PYTHONPATH:/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python"
à la fin du .bash_profile
fichier.
L'ajout export PYTHONPATH="${PYTHONPATH}:/my/other/path"
au ~ / .bashrc peut ne pas fonctionner s'il PYTHONPATH
n'existe pas actuellement (à cause du :
).
export PYTHONPATH="/my/other/path1"
export PYTHONPATH="${PYTHONPATH}:/my/other/path2"
L'ajout de ce qui précède à mon ~ / .bashrc a fait l'affaire pour moi sur Ubuntu 16.04
echo PYTHONPATH
et rien n'est apparu! cela signifie que ce PYTHONPATH n'a pas été initié, donc je colle juste cette ligne export PYTHONPATH=$PYTHONPATH:<PATH_TO_TF>/TensorFlow/models/research/object_detection
dans mon ~/.bashrc
fichier et source ~/.bashrc
elle. Plus tard, quand j'ai fait écho à $ PYTHONPATH, cela m'a donné :<PATH_TO_TF>/TensorFlow/models/research/object_detection
, une suggestion sur si j'ai fait quelque chose de mal?
export PYTHONPATH=<PATH_TO_TF>/TensorFlow/models/research/object_detection
, lorsque vous exportez PYTHONPATH pour la première fois, vous devez le faire sans la ${PYTHONPATH}:
partie
:<PATH_TO_TF>/TensorFlow/models/research/object_detection
-à- dire et supprime le 2e export PYTHONPATH=$PYTHONPATH:/TensorFlow/models/research/slim
. des suggestions à ce sujet, comment y remédier?
Sur MacOS, au lieu de donner le chemin vers une bibliothèque spécifique. Donner le chemin d'accès complet au dossier de projet racine dans
~/.bash_profile
fait ma journée, par exemple:
export PYTHONPATH="${PYTHONPATH}:/Users/<myuser>/project_root_folder_path"
après cela:
source ~/.bash_profile
L'ajout d'un nouveau chemin vers PYTHONPATH se fait manuellement en:
en ajoutant le chemin d'accès à votre profil ~ / .bashrc, dans le terminal par:
vim ~/.bashrc
collez ce qui suit dans votre profil
export PYTHONPATH="${PYTHONPATH}:/User/johndoe/pythonModule"
puis, assurez-vous de source votre profil bashrc chaque fois que vous exécutez votre code dans le terminal:
source ~/.bashrc
J'espère que cela t'aides.
J'ai ajouté de façon permanente dans Windows Vista, Python 3.5
Système> Panneau de configuration> Paramètres système avancés> Variables d'environnement avancées (appuyez sur)> Variables système> (si vous ne voyez pas PYTHONPATH dans la colonne Variable) (cliquez) Nouveau> Nom de la variable: PYTHONPATH> Valeur de la variable:
Veuillez écrire le répertoire dans la valeur Variable. Ce sont les détails de la réponse de Blue Peppers.
Le script ci-dessous fonctionne sur toutes les plates-formes car il s'agit de Python pur. Il utilise le chemin pathlib, documenté ici https://docs.python.org/3/library/pathlib.html , pour le faire fonctionner multiplateforme. Vous l'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))
Il s'agit d'une mise à jour de ce fil qui contient d'anciennes réponses.
Pour ceux qui utilisent MAC-OS Catalina ou une version plus récente (> = 10.15), il a été introduit un nouveau terminal nommé zsh
(un substitut à l'ancien bash
).
J'ai eu quelques problèmes avec les réponses ci-dessus en raison de ce changement, et j'ai quelque peu fait une solution de contournement en créant le fichier ~/.zshrc
et en collant le répertoire de fichiers dans le $PATH
et$PYTHONPATH
Donc, j'ai d'abord fait:
nano ~/.zshrc
Lorsque l'éditeur a ouvert, j'ai collé le contenu suivant:
export PATH="${PATH}:/Users/caio.hc.oliveira/Library/Python/3.7/bin"
export PYTHONPATH="${PYTHONPATH}:/Users/caio.hc.oliveira/Library/Python/3.7/bin"
enregistré et redémarré le terminal.
IMPORTANT: Le chemin ci-dessus est défini sur le chemin de mon ordinateur, vous devrez l'adapter à votre python.
Dans Python 3.6.4, vous pouvez conserver sys.path sur des 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