2016-10-25 18 views
1

パッケージ内の特定のモジュールのすべてのサブモジュールをプリントアウトしようとしています。しかし、これを行うために関数を実行すると、私は混在した結果を得ています。なぜこれが起こっているのか、それを避ける方法を誰もが説明できますか?pkgutil.iter_modulesで一貫性のない結果

プロジェクトレイアウト:

/Users/me/projects/project 
    setup.py 
    /project 
     __init__.py 
     tool.py 
     /projectdir 
      __init__.py 
      test.py 

/Users/me/projects/project/project/tool.py:

import pkgutil 


for importer, modname, ispkg in \ 
     pkgutil.iter_modules('project.projectdir', 
          prefix='project.projectdir.'): 
    if not ispkg: 
     print '{}'.format(modname) 

/ユーザ/ ME /プロジェクト/プロジェクト/プロジェクト/ PROJECTDIR /テスト私は混合の結果を得るしかしの.py

def one(): 
    return 'one' 

これは、理想的には/projectdir内のすべてのモジュールをプリントアウトする必要があります。

これは権利である:

$ cd /Users/me 
$ project 
>> project.projectdir.test 

これらは間違っている:.__path__を使用して

$ cd /Users/me/projects 
$ project 
>> 

$ cd /Users/me/projects/project 
$ project 
>> project.projectdir.one 

答えて

1

は、反復の相対パスのいずれかのチャンスを避けることができます。あなたの例ではproject.projectdir.を渡す代わりに/Users/me/projects/projectを渡します。

import pkgutil 

# import module that will be inspected 
import project 


package = project 
for importer, modname, ispkg in pkgutil.iter_modules(package.__path__, prefix='project.projectdir.'): 
    if not ispkg: 
     print '{}'.format(modname) 
関連する問題