2013-05-13 63 views
1

PEP 302定義了一種用於將用戶代碼掛接到導入過程並攔截導入的方式。Python導入鉤子和__main__

但是,這隻適用於後出現的進口某些代碼已運行以註冊導入掛鉤。

幾乎根據定義,在__main__模塊(即最初運行的腳本)之前不運行代碼。我沒有任何運氣試圖讓我的導入鉤子(做一些有用的事情)攔截爲__main__模塊加載的代碼。

有沒有什麼辦法可以讓我失蹤,還是我只是運氣不好?我可以接受讓我的導入鉤子不會在__main__模塊上執行轉換,但如果他們這樣做會很好。

+0

鉤在運行時添加的,因此,通過import'的'的semanthics,則不能修改的程序的行爲* *前設置與所述導入模塊鉤。你應該修改主程序來應用之前的鉤子,或者沒有鉤住主程序。 – Bakuriu 2013-05-13 10:30:16

+0

這就是我的想法,雖然我希望會有其他的方式!我一直在嘗試越來越黑客的事情(execl,stack introspection,reload()等),並沒有任何運氣,但我有一種直覺認爲它可能是可能的。 – 2013-05-13 13:22:41

回答

0

你試過像這樣在主內部導入了嗎?

if __name__ == '__main__': 
    import foo 
    # Rest of code here 
+0

這是可能的,但這裏的$ Rest代碼不會通過導入鉤子傳遞。這基本上就是我現在正在做的事情(即只有'foo'和其他導入才能獲得導入鉤子),我想查看是否有任何改進方法 – 2013-05-13 13:24:34