0

Python でモジュールを動的にインポートしようとしています。つまり、内部にモジュールを含む Python パッケージがあります。モジュール名を指定せずに、このモジュールへのポインターへの各モジュールの名前の辞書を保持したいと思います。

このディスカッションからの提案を使用しようとしました

私のディレクトリは次のとおりです。

foo/
    __init__.py
    bar1.py
    bar2.py

私が使用するスクリプトは次のとおりです。

import pkgutil
import foo

for importer, name, ispkg in pkgutil.iter_modules(foo.__path__, foo.__name__ + "."):
    print "Found submodule %s (is a package: %s)" % (name, ispkg)
    module = __import__(name)
    print "Imported", module

最初の反復で得られる出力は次のとおりです。

Found submodule foo.bar1 (is a package: False)
Imported <module 'foo' from '/path/to/foo/__init__.pyc'>

したがって、これを使用して bar1 モジュールを取得する代わりに、インポートで foo パッケージを取得します。

bar1 および bar2 モジュールを入手するにはどうすればよいですか?

pkgutil の使用が正しくない場合は、他の方法を使用できます。

4

1 に答える 1

0

インポートドキュメントから:

name変数が の形式の場合、通常、 name で指定されたモジュールではなくpackage.module、最上位パッケージ (最初のドットまでの名前) が返されます。ただし、空でないfromlist引数が指定された場合は、名前で指定されたモジュールが返されます。

また、そのサブモジュールを使用するには、パッケージをインポートするだけで十分なようです。

anthony@claudia:~$ python
Python 2.7.3 (default, Jan  2 2013, 13:56:14) 
[GCC 4.7.2] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import os
>>> os.path.join('one', 'two')
'one/two'
>>> 

逆に、サブモジュールをインポートすると、その親モジュールが暗黙的にインポートされます。

Python 2.7.3 (default, Jan  2 2013, 13:56:14) 
[GCC 4.7.2] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import os.path
>>> os.tmpfile()
<open file '<tmpfile>', mode 'w+b' at 0x7f565495d4b0>
>>>

したがって、単にインポートfooするだけで十分かもしれません。

インポートの正式な詳細は、ドキュメントに詳しく説明されています。

于 2013-07-22T12:41:39.900 に答える