1

我被进口困住了,不知道如何解决这个问题。

我有 3 个模块:

  1. test_project.py
  2. modules/__init__.py
  3. r.py
  4. module.py
  5. module_configuration.py

依赖项列表:

test_project.py IMPORTS modules/__init__.py
modules/__init__.py IMPORTS r.py 
r.py IMPORTS > module_configuration.py 
module_configuration.py IMPORTS > modules/__init__.py

如您所见,我们在这里有一个循环导入。

  • modules/__init__.py保留类定义的字典(类如 R)。
  • R类在其构造函数中创建 ModuleConfiguration 的实例
  • ModuleConfiguration需要来自modules/__init__.py.

我得到的错误信息:

ERROR: controller.test_project (unittest.loader.ModuleImportFailure)
----------------------------------------------------------------------
ImportError: Failed to import test module: controller.test_project
Traceback (most recent call last):
File "/usr/lib/python2.7/unittest/loader.py", line 252, in _find_tests
module = self._get_module_from_name(name)
File "/usr/lib/python2.7/unittest/loader.py", line 230, in  
_get_module_from_name__import__(name)
File "/media/103AEB9B3AEB7C5A/Projekty/c/svn/tests/controller/test_project.py",    
line 9, in <module>
from c.core.modules import MODULES
File "/media/103AEB9B3AEB7C5A/Projekty/c/svn/tests/../c/core/modules/__init__.py", line 5, in <module>
from R import R
File "/media/103AEB9B3AEB7C5A/Projekty/c/svn/tests/../c/core/modules/R.py", line  6, in <module>
from c.core.module import Module
File "/media/103AEB9B3AEB7C5A/Projekty/c/svn/tests/../c/core/module.py", line 13, in <module>
from c.core.module_configuration import ModuleConfiguration
File "/media/103AEB9B3AEB7C5A/Projekty/c/svn/tests/../c/core/module_configuration.py", line 7, in <module>
from c.core.modules import MODULES

ImportError: cannot import name MODULES

关于如何解决它的任何想法?

4

1 回答 1

1

不要在模块加载时创建实例,而是实现返回相关结果的函数并将这些函数保存在它们各自的模块中。然后,一旦加载了模块,所有人都可以使用一切。从moduleB导入moduleA和从moduleA导入moduleB没有任何问题。您是否需要必须在模块加载时创建的模块全局对象?这通常是不需要的。相反,一旦所有模块就位,就尝试构建第一次使用所需的任何模块全局变量。

于 2012-07-13T13:32:35.210 回答