2010-05-08 36 views
2

我從sage運行ipython,並且還使用了一些未安裝在我的主目錄中的包(lxml,argparse)。因此,我已經結束了與

$ HOME /鼠尾草/ local/lib目錄/蟒蛇的$ PYTHONPATH:$ HOME/lib目錄/蟒蛇

Python是讀取和處理第一易安裝。它會發現($ 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)和操作系統相關前綴(for 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發行版本沒有。

相關問題