web-dev-qa-db-fra.com

Est-ce que `anaconda` crée une variable PYTHONPATH distincte pour chaque nouvel environnement?

Je commence à travailler avec la distribution Python Anaconda de Continuum.io pour faire scipy.
J'ai pu installer Anaconda, mais je ne peux pas dire s'il crée une nouvelle variable d'environnement PYTHONPATHpour chaque nouvel environnement créé, ou s'il repose sur le système commun PYTHONPATH.

Je n'ai trouvé aucune information à ce sujet dans la documentation.

En outre, lorsque j’ai fait un printenv, je n’ai pas vu de variable PYTHONPATH dans l’environnement nouvellement créé - bien que j’ai trouvé quelques nouvelles variables d’environnement créées par anaconda.

Le meilleur que je puisse trouver, c’est que Anaconda a ajouté des répertoires Anaconda et le nouvel annuaire d’environnement à l’en-tête de la variable PATH - mais cela n’isole pas nécessairement le nouveau package de l’environnement système, mais il est proche.

Est-ce que quelqu'un connaît la réponse à cette question ou a trouvé un moyen de traiter cette préoccupation?

38
krishnab

Non, la seule chose qui doit être modifiée pour un environnement Anaconda est le PATH (pour qu’il obtienne le droit Python de l’environnement bin/ répertoire, ou Scripts\ sur Windows).

La façon dont les environnements Anaconda fonctionnent est de relier en dur tout ce qui est installé dans l’environnement. À toutes fins utiles, cela signifie que chaque environnement est une installation complètement distincte de Python et de tous les packages. En utilisant des liens physiques, cela est fait efficacement. Ainsi, il n'est pas nécessaire de jouer avec PYTHONPATH parce que le binaire Python de l'environnement recherche déjà les sites-packages dans l'environnement, la bibliothèque de l'environnement, etc.).

28
asmeurer

Anaconda n'utilise pas le PYTHONPATH. Il faut toutefois noter que si PYTHONPATH est défini, il pourrait être utilisé pour charger une bibliothèque qui ne se trouve pas dans l’environnement anaconda. C’est pourquoi, avant d’activer un environnement, il peut être intéressant de faire une

unset PYTHONPATH

Par exemple, ce PYTHONPATH pointe vers un incorrect pandas lib:

export PYTHONPATH=/home/john/share/usr/anaconda/lib/python
source activate anaconda-2.7
python
>>>> import pandas as pd
/home/john/share/usr/lib/python/pandas-0.12.0-py2.7-linux-x86_64.Egg/pandas/hashtable.so: undefined symbol: PyUnicodeUCS2_DecodeUTF8
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/home/john/share/usr/lib/python/pandas-0.12.0-py2.7-linux-x86_64.Egg/pandas/__init__.py", line 6, in <module>
    from . import hashtable, tslib, lib
ImportError: /home/john/share/usr/lib/python/pandas-0.12.0-py2.7-linux-x86_64.Egg/pandas/hashtable.so: undefined symbol: PyUnicodeUCS2_DecodeUTF8

la désactivation de PYTHONPATH empêche le chargement du mauvais pandas lib:

unset PYTHONPATH
source activate anaconda-2.7
python
>>>> import pandas as pd
>>>>
28
inodb