2017-07-02 29 views
3

是否有一個地方做任何情況下:是否__main__保證始終可導入?

import __main__ 

可能導致ImportError?我試過的所有案例似乎表明,這總是有效的。關於__main__的文檔似乎沒有提到有關此事的任何內容。爲了給出一些上下文:我試圖使用usersitecustomize鉤子在__main__.__dict__中注入一些名字,以便(主要)在REPL啓動時使它們可用。

誠然,沒有發生的__import__重新定義(作爲註釋說明),這主要歸結爲,如果我需要將其包裝在一個try-except與否。

+2

當然,例如,如果你[更換'__import__'(http://ideone.com/gFuzwp),但我懷疑這就是你之類的話尋找。你對什麼樣的失敗類型感興趣? – user2357112

+0

嘗試在A.py中打印'__main__',然後在B.py中導入A. –

+4

你們在說什麼? '__main__'並不總是當前模塊;它是主腳本執行的名稱空間,或交互式代碼以交互模式執行的名稱空間。 – user2357112

回答

2

它可能是。蟒蛇在這個文件來初始化__main__https://github.com/python/cpython/blob/master/Python/pylifecycle.c#L1327

但是請注意,像runpyIPython模塊更換__main__模塊用自己的動態創建者,以防止碰撞與自己的啓動腳本,並在runpy的情況下,提供預期的行爲。

runpy本身是Python標準庫的一部分,它提供了-m標誌的實現,允許任意模塊作爲腳本執行。

另一種方法是IPython,它提供了在啓動新REPL時執行代碼的功能。

欲瞭解更多詳情,請看這裏:http://ipython.readthedocs.io/en/stable/config/intro.html?highlight=exec_lines