gpt4 book ai didi

python - 与 pkgutil.iter_modules 结果不一致

转载 作者:太空宇宙 更新时间:2023-11-03 16:02:00 24 4
gpt4 key购买 nike

我正在尝试打印包中给定模块的所有子模块。但是,当运行该函数来执行此操作时,我得到的结果很复杂,任何人都可以解释为什么会发生这种情况以及如何避免它吗?

项目布局:

/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)

/Users/me/projects/project/project/projectdir/test.py

def one():
return 'one'

理想情况下,这应该打印出 /projectdir 内的所有模块,但我得到的结果是混合的。

这是正确的:

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

这些都是错误的:

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

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

最佳答案

使用.__path__可以避免使用相对路径进行迭代的任何机会。在您的示例中,您将传递 /Users/me/projects/project,而不是传递 project.projectdir。

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)

关于python - 与 pkgutil.iter_modules 结果不一致,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40246845/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com