Quand je cours
import sys
print sys.path
sur mon Mac (Mac OS X 10.6.5, Python 2.6.1), j'obtiens les résultats suivants.
/Library/Python/2.6/site-packages/ply-3.3-py2.6.Egg ... /Library/Python/2.6/site-packages/ipython -0.10.1-py2.6.Egg /System/Library/Frameworks/Python.framework/Versions/2.6/lib/python26.Zip /System/Library/Frameworks/Python.framework /Versions/2.6/lib/python2.6[.____.[/System/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/plat-darwin[.____.[/System/Library/Frameworks /Python.framework/Versions/2.6/lib/python2.6/plat-mac[.____.[/System/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/plat-mac/lib- packages de scripts /System/Library/Frameworks/Python.framework/Versions/2.6/Extras/lib/python /System/Library/Frameworks/Python.framework/Versions/2.6 /lib/python2.6/lib-tk[.____.[/System/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/lib-old[.____. E5E/System/Library/Frameworks /Python.framework/Versions/2.6/lib/python2.6/lib-dynload[.____.[/Library/Python/2.6/site-packages[.____.[/System/Library/Framew orks/Python.framework/Versions/2.6/Extras/lib/python/PyObjC /System/Library/Frameworks/Python.framework/Versions/2.6/Extras/lib/python/wx-2.8-mac-unicode
Ils sont regroupés en 5 catégories.
Et je peux ajouter plus de chemins en utilisant le code
sys.path.insert(0, MORE_PATH)
Sur la base de la réponse de Michael, j'ai examiné site.py et j'ai obtenu le code suivant.
def addsitepackages(known_paths):
"""Add site-packages (and possibly site-python) to sys.path"""
sitedirs = []
seen = []
for prefix in PREFIXES:
if not prefix or prefix in seen:
continue
seen.append(prefix)
if sys.platform in ('os2emx', 'riscos'):
sitedirs.append(os.path.join(prefix, "Lib", "site-packages"))
Elif sys.platform == 'darwin' and prefix == sys.prefix:
sitedirs.append(os.path.join("/Library/Python", sys.version[:3], "site-packages"))
Je pense également que le nom du répertoire qui contient site.py (/System/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6 pour mon Mac) devrait être intégré à Python = code source.
La plupart des éléments sont configurés dans site.py
De Python qui est automatiquement importé au démarrage de l'interpréteur (sauf si vous le démarrez avec l'option -S
). Peu de chemins sont configurés dans l'interpréteur lui-même lors de l'initialisation (vous pouvez le découvrir en commençant python avec -S
)).
De plus, certains frameworks (comme Django je pense) modifient sys.path
Au démarrage pour répondre à leurs besoins.
Le module site
a un assez bon documentation , un commentaire code source et affiche quelques informations si vous l'exécutez via python -m site
.
De Apprentissage de Python:
sys.path est le chemin de recherche du module. Python le configure au démarrage du programme, fusionnant automatiquement le répertoire personnel du fichier de niveau supérieur (ou une chaîne vide pour désigner le répertoire de travail actuel), tous les répertoires PYTHONPATH, le contenu de tout - . pth les chemins de fichiers que vous avez créés et les répertoires de bibliothèque standard. Le résultat est une liste de chaînes de noms de répertoires qui Python recherche à chaque importation d'un nouveau fichier.
site.py est en effet les réponses. Je voulais supprimer toutes les dépendances de l'ancien Python qui est installé par défaut sur mon mac. Cela fonctionne plutôt bien, car 'site.py' est appelé à chaque fois que le python est démarré.
Pour Mac, j'ai ajouté manuellement la ligne suivante à la fin de main () dans /System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/site.py:
sys.path = filter (lambda a: not a.startswith('/System'), sys.path)
Le chemin a ces parties:
$PYTHONPATH
Les chemins ne sont pas ignorés. Mais, ils peuvent ne pas être trouvés et cela ne déclenchera pas d'erreur. sys.path ne doit être ajouté que trop, pas soustrait de. Django ne supprimerait pas les chemins.
Notez également: si la variable PYTHONHOME
env est définie, les bibliothèques standard seront chargées à partir de ce chemin au lieu de la valeur par défaut, comme documenté .
Ce n'est pas une réponse directe à la question, mais quelque chose que je viens de découvrir qui provoquait le chargement des mauvaises bibliothèques standard, et mes recherches m'ont conduit ici en cours de route.
Vous utilisez le système python /usr/bin/python
.
sys.path est défini à partir des fichiers système au démarrage python.
Ne touchez pas ces fichiers, en particulier site.py, car cela pourrait perturber le système.
Cependant, vous pouvez changer sys.path en python, en particulier au démarrage:
dans ~/.bashrc ou ~/.zshrc:
export PYTHONSTARTUP=~/.pythonrc
dans ~/.pythonrc:
écrivez vos modifications dans sys.path.
Ces modifications seront uniquement pour vous dans des shells interactifs.
Pour le piratage à faible risque pour le système, installez votre propre version python).
Ajout à la réponse acceptée et réponse aux commentaires qui disent qu'un module ne doit pas supprimer les entrées de sys.path
:
C'est généralement vrai, mais il y a existe circonstances dans lesquelles vous voudrez peut-être modifier sys.path
En supprimant les entrées. Par exemple - et ceci est spécifique à Mac; * Des corollaires nix/Windows peuvent exister - si vous créez un Python.framework
personnalisé à inclure dans votre propre projet, vous souhaiterez peut-être ignorer les entrées par défaut sys.path
qui pointent vers le système Python.framework
.
Vous avez plusieurs options:
Piratez le site.py
, Comme @damirv l'indique, ou
Ajoutez votre propre module (ou package) sitecustomize
au framework personnalisé qui obtient le même résultat final. Comme indiqué dans les commentaires site.py
(Pour 2.7.6, de toute façon):
Après ces manipulations de chemin, une tentative est effectuée pour importer un module nommé sitecustomize, qui peut effectuer des personnalisations supplémentaires spécifiques au site arbitraires. Si cette importation échoue avec une exception ImportError, elle est silencieusement ignorée.