124

を使用せずに、パッケージ内のすべてのモジュールの名前を一覧表示する簡単な方法はあります__all__か?

たとえば、次のパッケージがあるとします。

/testpkg
/testpkg/__init__.py
/testpkg/modulea.py
/testpkg/moduleb.py

このようなことを行うための標準または組み込みの方法があるかどうか疑問に思っています:

>>> package_contents("testpkg")
['modulea', 'moduleb']

手動のアプローチは、パッケージのディレクトリを見つけるためにモジュール検索パスを反復することです。次に、そのディレクトリ内のすべてのファイルをリストし、一意の名前の py/pyc/pyo ファイルを除外し、拡張子を削除して、そのリストを返すことができます。しかし、これは、モジュールのインポート メカニズムがすでに内部で行っていることに対して、かなりの量の作業のように思えます。その機能はどこかに公開されていますか?

4

10 に答える 10

222

python2.3以降を使用すると、次のpkgutilモジュールを使用することもできます。

>>> import pkgutil
>>> [name for _, name, _ in pkgutil.iter_modules(['testpkg'])]
['modulea', 'moduleb']

編集:のパラメータpkgutil.iter_modulesはモジュールのリストではなく、パスのリストであることに注意してください。したがって、次のようなことを行うことができます。

>>> import os.path, pkgutil
>>> import testpkg
>>> pkgpath = os.path.dirname(testpkg.__file__)
>>> print([name for _, name, _ in pkgutil.iter_modules([pkgpath])])
于 2009-08-21T09:21:02.440 に答える
25

多分これはあなたが探していることをするでしょうか?

import imp
import os
MODULE_EXTENSIONS = ('.py', '.pyc', '.pyo')

def package_contents(package_name):
    file, pathname, description = imp.find_module(package_name)
    if file:
        raise ImportError('Not a package: %r', package_name)
    # Use a set because some may be both source and compiled.
    return set([os.path.splitext(module)[0]
        for module in os.listdir(pathname)
        if module.endswith(MODULE_EXTENSIONS)])
于 2009-01-28T22:14:44.090 に答える
2

これにより、モジュールが一覧表示されます。

help("modules")
于 2019-01-18T22:59:41.757 に答える
1

パッケージに関する情報を Python コードの外で (コマンド プロンプトから) 表示したい場合は、pydoc を使用できます。

# get a full list of packages that you have installed on you machine
$ python -m pydoc modules

# get information about a specific package
$ python -m pydoc <your package>

pydoc と同じ結果が得られますが、ヘルプを使用してインタープリター内で

>>> import <my package>
>>> help(<my package>)
于 2019-03-22T16:28:17.463 に答える
-3
def package_contents(package_name):
  package = __import__(package_name)
  return [module_name for module_name in dir(package) if not module_name.startswith("__")]
于 2009-03-25T14:58:11.463 に答える