【问题标题】:Namespaces comprehension命名空间理解
【发布时间】:2013-10-15 12:12:16
【问题描述】:

我正在构建 django 应用程序,但遇到了 som 导入问题。我的文件结构:

project/
  my_app/
    models/
      __init__.py
      Article.py
      StockMovementProduct.py
    tools/
      __init__.py
      Synchronizer.py

project/my_app/models/_init_.py

from Article import *
from StockMovementProduct import *

project/my_app/models/Article.py

from django.db import models

class Article(models.Model):
[...]

project/my_app/models/StockMovementProduct.py

from django.db import models
from my_app.tools import Synchronizer

class StockMovementProduct(models.Model):
  def sync_articles(self):
    sync = Synchronizer(self)
[...]

project/my_app/tools/_init_.py为空

project/my_app/tools/Synchronizer.py

from my_app.models import Article
from my_app.models import StockMovementProduct

class Synchronizer():
[...]

当我运行我的代码时,会出现此错误:

  File "/home/bux/Projets/project/my_app/models/__init__.py", line 7, in <module>
    from StockMovementProduct import *
  File "/home/bux/Projets/project/my_app/models/StockMovementProduct.py", line 5, in <module>
    from my_app.tools import Synchronizer
  File "/home/bux/Projets/project/my_app/tools/Synchronizer.py", line 2, in <module>
    from my_app.models import StockMovementProduct
ImportError: cannot import name StockMovementProduct

我不明白为什么(在 Synchronizer.py 中)Article 导入工作而 StockMovementProduct 导入不工作。

在 Synchronizer.py 我也尝试:

from my_app.models import Article
from ..models import StockMovementProduct

但没有成功。导入方法缺少什么?

【问题讨论】:

    标签: python django namespaces


    【解决方案1】:

    您的代码中有一个循环导入,即您的 StockMovementProduct.py 导入 Synchronizer.pySynchronizer.py 导入 StockMovementProduct.py。这是一个很常见的问题,已经有很多帮助:Circular dependency in Python

    【讨论】:

      【解决方案2】:

      你有一个循环导入。 StockMovementProduct 导入 Synchronizer,Synchronizer 导入 StockMovementProduct。

      您需要重新构造并可能将公共依赖项移动到第三个文件中。虽然不知道内容,但很难提出解决方案

      【讨论】:

        猜你喜欢
        • 2021-08-26
        • 2011-04-17
        • 2012-02-25
        • 2021-12-16
        • 2015-01-01
        • 2017-01-16
        • 2014-02-23
        • 1970-01-01
        相关资源
        最近更新 更多