2010-05-08 2 views
2

Я запускаю ipython от sage, а также использую некоторые пакеты, которые не находятся в sage (lxml, argparse), которые установлены в моем домашнем каталоге. Поэтому я закончил с $ PYTHONPATH из

$ HOME/шалфея/местные/Библиотека/питон: $ HOME/Lib/питон

Python читает и обрабатывая первый простой установки. pth он находит ($ HOME/sage/local/lib/python/site-packages/easy-install.pth), но не второй, поэтому яйца, установленные в $ HOME/lib/python, не добавляются к пути. При чтении готового сайта site.py я не могу за всю жизнь понять, почему это делается.

Может кто-нибудь просветить меня? Или посоветуйте, как подтолкнуть Python к чтению файлов easy-install.pth?

Консолидация обоих в один .pth файл является жизнеспособным обходным решением на данный момент, поэтому этот вопрос в основном предназначен для значения любопытства.

ответ

1

TL; DR: вызов site.addsitedir обрабатывать файлы .pth


Я не уверен, OS X, но PYTHONPATH и пакет сайта на самом деле являются своего рода независимыми, где речь идет о увеличивая SYS. дорожка.

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" 

На моих Linux коробков, PYTHONPATH является частью продукции и оба раза - несмотря на то, -S переключатель во второе скачет прогон импортирующего модуль сайта.

Теперь, что site.module действительно принимает комбинации (sys.exec_prefix, sys.prefix) и зависимые от ОС префиксы (для linux: lib/python2.7/dist-packages), проверяет, есть ли какая-либо комбинация является существующим каталогом, и если это так обрабатывается (разбор .pth файлов в комплекте)

Код находится в модуле site.py - 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")) 
     (...) 

Эта функция в конечном итоге возвращает список, и для каждого элемента этой функции списка addsitedir называется - и в том, что один, у вас есть логика, чтобы получить файлы .pth работать.

Столь длинная история - обработка .pth файлов - вызов site.addistedir в вашем начальном скрипте. Вы также можете рассмотреть возможность его использования в файле sitecustomize.py - просто убедитесь, что у вашего дистрибутива python его еще нет.

 Смежные вопросы

  • Нет связанных вопросов^_^