2010-05-08 3 views
2

J'utilise ipython à partir de sage et j'utilise aussi des paquets qui ne sont pas en sauge (lxml, argparse) qui sont installés dans mon répertoire personnel. J'ai donc fini avec un $ PYTHONPATH de

$ HOME/sauge/local/lib/python: $ HOME/lib/python

Python est en train de lire et de traiter le premier facile d'installation. pth il trouve ($ HOME/sage/local/lib/python/site-paquets/easy-install.pth) mais pas le second, donc les oeufs installés dans $ HOME/lib/python ne sont pas ajoutés au chemin. En lisant le site.py, je ne peux pas, pour la vie de moi, voir pourquoi il le fait.

Quelqu'un peut-il m'éclairer? Ou conseillez comment pousser Python à lire les deux fichiers easy-install.pth? Consolider les deux dans un fichier .pth est une solution de contournement viable pour l'instant, donc cette question est principalement pour la valeur de curiosité.

Répondre

1

TL; DR: appeler site.addsitedir pour traiter les fichiers .pth


Je ne suis pas sûr OS X, mais PYTHONPATH et package de site sont en fait assez indépendant où il vient d'augmenter sys. chemin.

Try this: 
    set PYTHONPATH somehow (OS dependent) 
    python -c "import sys; print '\n'.join(sys.path); print sys.exec_prefix; print sys.prefix" 
    python -S -c "import sys; print '\n'.join(sys.path);print sys.exec_prefix; print sys.prefix" 

Sur ma boîte Linux, le PYTHONPATH fait partie de la sortie deux fois - même si -S passer dans le second skips d'exécution du module d'importation du site. Maintenant, ce que fait site.module prend en fait des combinaisons de préfixes (sys.exec_prefix, sys.prefix) et OS dépendants (pour linux: lib/python2.7/dist-packages), vérifie si l'une des combinaisons est un répertoire existant, et le cas échéant le traite (analyse des fichiers .pth inclus)

Le code est dans le site site.py module - getsitepackages().

def getsitepackages(): 
    """Returns a list containing all global site-packages directories 
    (and possibly site-python). 

    For each directory present in the global ``PREFIXES``, this function 
    will find its `site-packages` subdirectory depending on the system 
    environment, and will return a list of full paths. 
    """ 
    sitepackages = [] 
    seen = set() 

    for prefix in PREFIXES: 
     if not prefix or prefix in seen: 
      continue 
     seen.add(prefix) 

     if sys.platform in ('os2emx', 'riscos'): 
      sitepackages.append(os.path.join(prefix, "Lib", "site-packages")) 
     elif os.sep == '/': 
      sitepackages.append(os.path.join(prefix, "lib", 
             "python" + sys.version[:3], 
             "site-packages")) 
      sitepackages.append(os.path.join(prefix, "lib", "site-python")) 
     else: 
      sitepackages.append(prefix) 
      sitepackages.append(os.path.join(prefix, "lib", "site-packages")) 
     (...) 

Cette fonction retourne finalement une liste, et pour chaque élément de cette fonction de addsitedir liste est appelée - et celui-là, vous avez la logique pour obtenir des fichiers .pth travail. En bref, pour traiter les fichiers .pth, appelez site.addistedir dans votre script d'entrée de gamme. Vous pouvez également envisager de l'avoir dans votre sitecustomize.py - assurez-vous simplement que votre distribution Python n'en a pas déjà.

Questions connexes