2012-06-08 149 views
7

當導入非內置模塊時,解釋器將搜索sys.path給出的位置。 sys.path從這些位置(http://docs.python.org/library/sys.html#sys.path)初始化:如何在Mac OS X上確定python模塊搜索路徑?

  1. 包含輸入腳本(或當前目錄)
  2. PYTHONPATH目錄
  3. 安裝有關的默認

雖然前兩個來源很簡單,任何人都可以解釋第三者是如何工作的,以及影響它的可能性有哪些?

雖然我有興趣在一個通用的解決方案,我的具體問題是:

  • 我已經安裝了Enthought distribution 7.2 32-bit,然後Scipy-Superpack。現在enthought python試圖從/Library/Python/2.7/導入numpy,這是superpack安裝它們的地方,而不是從enthought網站包。
  • a wxPython使用py2app創建的應用程序-A與使用python start_app.py啓動應用程序時不具有相同的sys.path

回答

2

第三個來源的基礎是在編譯時(或更準確地說是配置時間)設置的,具體取決於平臺。然後通過.pth文件等將其擴展並添加到運行時(這是您可以在Python可執行文件編譯爲影響第三個源時執行的操作)。

Python文檔的這個頁面有所有的.pth文件是如何工作的,我不知道爲什麼你想要的信息,以及如何sys.path從構建時設置構造也比較信息等http://docs.python.org/library/site.html

來影響第三個來源,但是,當你可以影響整個sys.path。總之,影響sys.path(而無需重新編譯Python或修補的源代碼)的三種方式是:

  1. 經由PYTHONPATH環境變量。
  2. 通過創建.pth文件並將它們放在Python掃描軟件包的位置。 (見前面的詳細信息的鏈接。)
  3. 編程,通過導入sys然後開頭或末尾到sys.path

    import sys 
    sys.path.insert(0, '/this/path/will/be/considered/first') 
    

希望有這三種方式可以幫助你做你想做的。

+0

感謝您的回答!我特別感興趣的第三個來源的原因是,有不需要的庫不在'PYTHONPATH'中,導致錯誤,我沒有直接訪問sys.path,例如當建立獅身人面像文件。 – christianbrodbeck

1

在Mac OS X 10.7.5系統上,我也遇到了Enthought python在/Library/Python/2.7/中查找模塊的問題。顯然,這是由位於/Library/Python/2.7/site-packages中的easy-install.pth文件造成的。在更改此文件的擴展名後,Enthought python導入了Enthought模塊(從/Library/Frameworks/Python.framework/Versions/7.3/lib/python2.7/site-packages)。

相關問題