2017-07-06 18 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 '....'>] 

はそれを行うための他の方法はありますか? (from my_package import *は動作しません)。

さらに、この現象の原因を知っていますか?名前空間と関係がありますか?

P.Sパッケージはローカルにインストールされていないため、サーバーからすべてのものをロードしています。

+0

2回目のインポートの前に 'my_package.module_a' *にアクセスするとどうなりますか? – jonrsharpe

答えて

1

パッケージネームスペース内に存在する可能性のあるすべてのモジュールを確実に取得する方法はありません。パッケージディレクトリからサブパッケージディレクトリとモジュールファイルを検索することができますが、types.ModuleTypeオブジェクトを作成してトップパッケージに追加するだけで、コードの一部が停止することはありません。対処しているパッケージが名前空間パッケージである場合、ディスク上の別の場所に配置されているモジュールとサブパッケージの数に制限はありません。

関連する問題