Python: importing a module that imports a module

自闭症网瘾萝莉.ら 提交于 2020-01-13 05:44:48

问题


So in a file foo I am importing modules:

import lib.helper_functions
import lib.config

And in helper_functions.py, I have:

import config

When I run the main function of foo I get an ImportError

EDIT: Here is the structure of the files I have

foo.py
lib/
    config.py
    helper_functions.py

The error results from importing config in helper_functions

Traceback (most recent call last):
  File "C:\Python33\foo.py", line 1, in <module>
    import lib.helper_functions
  File "C:\Python33\lib\helper_functions.py", line 1, in <module>
    import config
ImportError: No module named 'config'

So: when I run foo.py the interpreter is complaining about the import statements of helper_functions. Yet when I run the main of helper_functions, no such error appears.


回答1:


You need to import config using an absolute import. Either use:

from lib import config

or use:

from . import config

Python 3 only supports absolute imports; the statement import config only imports a top level module config.




回答2:


In python each module has its own namespace. When you import another module you are actually only importing its name.

The name "config" exists in the module helper_functions because you imported it there. Importing helper_functions in foo brings only the name "helper_function" into foo's namespace, nothing else.

You could actually refer to the "config" name in foo.py with your current imports by doing something like:

lib.helper_functions.config

But in python is always better to be explicit rather than implicit. So importing config in in foo.py would be the best way to proceed.

#file foo.py
import lib.helper_functions
import config


来源:https://stackoverflow.com/questions/16004076/python-importing-a-module-that-imports-a-module

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!