2011-03-31 76 views
13

http://docs.python.org/library/sys.html Python文檔說sys.path是...故障排除蟒蛇的sys.path

從環境變量PYTHONPATH,再加上安裝相關的默認初始化。

我在我的sys.path中發現了一個路徑項,導致問題,並且在跟蹤它時遇到了很多問題。我在Google上發佈的所有內容都是解釋如何項添加到PYTHONPATH變量。

我的問題是:是否有任何工具可以幫助追蹤爲什麼特定項目在您的sys.path?如何找到更多關於「依賴於安裝的默認設置」的信息?

到目前爲止,我發現部分答案是在python上使用strace,並尋找.pth文件。我還發現一個sys.path_importer_cache,這可能會或可能不適用。

+0

哪個項目是? – 2011-03-31 13:44:10

+0

你在使用什麼操作系統? – cwallenpoole 2011-03-31 13:46:39

+1

有問題的項目只是我自己的軟件包,我曾以root身份使用過「setup.py develop」(對我很慚愧)。操作系統是Ubuntu Linux,但是python是一個獨立於平臺的語言,我對尋找文件/目錄列表的看法較少,對於文檔,一般準則甚至是到CPython源代碼的鏈接,我更少。 – 2011-04-01 01:41:44

回答

5

我最近與sys.path有一些問題,這裏是我如何去弄清楚這些條目來自哪裏。我能夠跟蹤所有條目以及它們來自哪裏。希望這也能幫助你。

  • 第一個加入的是C:\WINNT\system32\python27.zip(更多細節見PEP273)。

  • 添加的下一個是從Windows註冊表中的條目。條目C:\Python27\DLLs;C:\Python27\lib; C:\Python27\lib\plat-win; C:\Python27\lib\lib-tk來自HOT_KEY_LOCAL_USER/Python/PythonCore/2.7/PythonPath在註冊表中。有關Python源代碼的更多詳細信息,請點擊這裏http://svn.python.org/projects/python/trunk/PC/getpathp.c(直到找到上面的鏈接時,這些條目纔是我理解中最爲棘手的部分)。

  • 接着,作爲site包文檔(link)中所解釋的,sys.pathsys.prefixsys.exec_prefix建造。在我的電腦上,他們都指向C:\Python27。默認情況下,它會搜索lib/site-packages anywways。所以現在條目C:\Python27; C:\Python27\lib\site-packages被追加到上面的列表中。

  • 接下來按字母順序搜索每個.pth文件。我在我的網站包中有easy_install.pth,pywin32.pthsetuptools.pth。這是事情開始變得奇怪的地方。如果.pth文件中的條目只是目錄位置,那將很簡單。他們只會被逐行追加到sys.path。但是easy_install.pth有一些python代碼,導致easy_install.pth中列出的條目添加列表的列表的sys.path列表的列表中的列表列表。

  • pywin32.pth目錄條目後,setuptools.pth都在sys.path列表的末尾添加的預期。

注:雖然上面的討論涉及到Windows,它甚至在Mac相似等在Mac上它只是增加了不同的操作系統默認像darwin等。然後開始查看site-packages目錄中的.pth文件。

就你而言,你可以從啓動一個python shell開始,並檢查sys.prefixsys.exec_prefix指向哪裏,然後從那裏鑽取。注意2:如果您使用的是IDE,比如Aptana/PyDev,它會添加更多自己的配置。所以你需要警惕這一點。

+0

鏈接的榮譽。我找不到任何類似於Mac或Linux的'getpathp.c'。有一個嗎? – 2011-04-01 02:01:42

+0

謝謝。 Mac沒有註冊表......所以它不像使用註冊表鍵找到正確的位置那麼簡單。 Mac的位置也取決於製作安裝程序時使用的構建選項。 FWIW,這是關於Mac的最佳鏈接。 http://svn.python.org/projects/python/trunk/Mac/README。我檢查了我的Mac,並且Python 2.7實際上安裝在該文件中提到的位置。 – 2011-04-01 03:41:25