相关疑难解决方法(0)

Python中的循环(或循环)导入

如果两个模块相互导入会发生什么?

为了概括这个问题,Python中的循环导入怎么样?

python circular-dependency cyclic-reference

318
推荐指数
8
解决办法
13万
查看次数

为什么"导入模块"然后"从包导入模块"再次加载模块?

我的PYTHONPATH中有一个看起来像这样的包:

package/
    __init__.py
    module.py
        print 'Loading module'
Run Code Online (Sandbox Code Playgroud)

如果我从package/目录运行Python (或在此目录中编写另一个模块)并键入

import module
Run Code Online (Sandbox Code Playgroud)

它加载module.py并按预期打印出"加载模块".但是,如果我再输入

from package import module
Run Code Online (Sandbox Code Playgroud)

它加载module.py并再次打印"加载模块" ,这是我没想到的.这是什么理由?

注意:我认为我从技术上理解为什么Python会这样做,因为sys.modules键import module只是"module",但是对于from package import module它来说"package.module".所以我想我想知道的是为什么密钥在这里是不同的 - 为什么文件的路径名不是用作密钥,以便Python做到人们期望的呢?

python module package python-import

13
推荐指数
1
解决办法
1667
查看次数

在Python中处理导入周期的最佳方法是什么?

在我们的项目中,我们使用以下模块进行级别"控制":'grid','gridcell','combo'等.网格模块导入gridcell模块,因为网格由单元格组成,而任何单元格都可以在其中包含组合.所以最初我们开始在这些类中使用'from ... import ...'语句,方法如下:

#grid.py
from controls.gridcell import cell
#gridcell.py
from controls.combo import combo
Run Code Online (Sandbox Code Playgroud)

但是在我们开始使用网格作为组合内容之前,这是可以的.一旦我们开始这样做,我们就需要将'from grid import grid'语句添加到'combo.py'中.执行此操作后,我们得到一个导入异常:

from controls.gridcell import gridcell 
ImportError: Cannot import name gridcell 
Run Code Online (Sandbox Code Playgroud)

编辑:

我也试过'import ... as ...'并得到以下错误:

import controls.gridcell as gridcell
AttributeError: 'module' object has no attribute 'gridcell'
Run Code Online (Sandbox Code Playgroud)

我已经阅读了几篇文章,我发现的关于如何解决这个问题的所有内容都是使用'import'语句,例如:

#grid.py
import controls.gridcell
#gridcell.py
import controls.combo
#combo.py
import controls.grid
Run Code Online (Sandbox Code Playgroud)

但这导致我们使用全名,如'controls.gridcell.cell','controls.combo.combo','controls.grid.grid'等.

所以我的问题是 - 有没有其他方法可以做到这一点(因此可以使用较短的名称)或者这是如何解决这个问题的唯一方法?

抱歉,如果我错过了什么

对所有人而言

python python-import

4
推荐指数
1
解决办法
4652
查看次数