2013-03-09 25 views
2

問題:如何系統地探測解釋器隨時涉及的文件(如在調試模式下)。我如何系統地確定Python在其可訪問的包/模塊樹中的依賴關係?

當一切都失敗時,我會收到錯誤消息。我所要求的是相反的:一切都有效,但我不知道我有多少多餘的垃圾,儘管我可以想象像pynotify這樣的東西可能可以追蹤它。

語境:

我花了整個上午都在行使審判&錯誤要獲得軟件包的工作。我確定我已經將相關的python軟件包複製到至少3個目錄中,並用垃圾將我的windows setx -m path弄糟。現在我想知道如何在沒有任何依賴的情況下清理它,並且實際上從過程中學習。

我不可能是唯一一個想知道這件事的人。一些有才華的測試,開發人員必須編寫了一個腳本/包:

import everything from everywhere 
check for all dependencies 
E = list(errorMessages) 
L = list_of_stuff_that_was_used 
print L 
print E 

所以,如果我有東西存放這是不是在L,我可以將其刪除。但是,當然探測必須徹底,以消耗所有可訪問的文件(或至少積極使用的目錄)。

問題是什麼不是約: 我對sys.path什麼是不感興趣。這是微不足道的。

更多的上下文:

我從The Hitchhikers Guide to Packaging這個問題的未來被不客氣知道,但它不探討了過去。因此,從Python 2xx到3xx的轉換,這個問題必須變得越來越相關?

回答

3

python的動態特性使其成爲不可能完成的任務。例如,

函數也可以導入。你打算在所有模塊中運行所有代碼嗎?

然後有後向兼容性測試;導入pysqlite2如果sqlite3不存在,使用反向移植模塊如果collections.Counter不存在於Python等的當前版本有平臺特定的模塊(os.pathposixpathntpath(相同的代碼但重命名)或者riscospath取決於當前平臺)以及整個銷售進口到主模塊(posix,nt,os2,和riscos都可以由os模塊使用,具體取決於平臺提供的功能)。

使用setuptools的軟件包聲明它們的依賴關係,可通過pkg_resources庫發現。這是可合理發現的限制。

+0

Thanks Martijn;我認爲引導虛擬環境到一個臨時目錄監控與pynotify可以做的伎倆(?),但如果你認爲這條路線註定要失敗,那麼我甚至不會嘗試。 – 2013-03-09 11:33:53

+0

@BHM:任何pip-installable包都會聲明它的依賴關係,所以只需使用'pkg_resources'和朋友即可。任何你需要手動安裝的東西,好吧,你已經知道它是依賴關係了,不是嗎? :-) – 2013-03-09 11:52:40

+0

明白了:-)謝謝。 – 2013-03-09 12:09:55