2017-07-06 194 views
1

可以說我有一個python包,我想列出這個包中的所有模塊。即從python包中獲取模塊名稱

>>> import my_package 
>>> import inspect 
>>> inspect.getmembers(my_package, inspect.ismodule) 
>>> [] 

由於某種原因,我得到一個空的列表。現在,如果我手動從包中加載一個模塊則:

>>> import my_package.module_a 
>>> inspect.getmembers(my_package, inspect.ismodule) 
>>> ['module_a, <module '....'>] 

假設我有多個模塊,我不希望加載逐一是否有任何其他方式做到這一點? (ps.s. from my_package import *將不起作用)。

此外,你知道是什麼造成這種行爲?與命名空間有什麼關係?

P.S包不是在本地安裝的,我從服務器加載所有東西。

+0

如果在第二次導入之前訪問my_package.module_a *,會發生什麼情況? – jonrsharpe

回答

1

實際上並沒有一種可靠的方法來獲取每個可能存在於包命名空間中的模塊。您可以在軟件包目錄中搜索子包目錄和模塊文件,但是沒有什麼能夠停止一些代碼,只需創建一個types.ModuleType對象並將其附加到頂層包。如果您正在處理的包是名稱空間包,則可能有多個模塊和子包位於磁盤上的不同位置。