相关疑难解决方法(0)

如何在Python中进行相对导入?

想象一下这个目录结构:

app/
   __init__.py
   sub1/
      __init__.py
      mod1.py
   sub2/
      __init__.py
      mod2.py
Run Code Online (Sandbox Code Playgroud)

我正在编码mod1,我需要从中导入一些东西mod2.我该怎么办?

我尝试了from ..sub2 import mod2但是我得到了"尝试非包装中的相对导入".

我google了一下,但发现只有" sys.path操纵"黑客.有没有干净的方式?


编辑:我__init__.py的所有人目前都是空的

EDIT2:我想这样做,因为SUB2包含了为子包(共享类sub1,subX等等).

Edit3:我正在寻找的行为与PEP 366中描述的相同(感谢John B)

python python-module python-import

508
推荐指数
11
解决办法
31万
查看次数

何时使用绝对导入

我正在改变一堆旧的python代码,偶尔会遇到包之间的名称冲突.我有一个关于何时应该使用绝对导入以及是否适合仅按名称导入同级模块的问题.

/package/
/package/__init__.py
/package/subA
/package/subA/__init__.py
/package/subA/moduleA.py
/package/subA/moduleB.py
/package/subB
/package/subB/__init__.py
/package/subB/moduleA.py
/package/subB/moduleB.py
Run Code Online (Sandbox Code Playgroud)

包中的每个import语句应该是这样的:

import package.subX.moduleX
Run Code Online (Sandbox Code Playgroud)

要么

from package.subX import moduleX
Run Code Online (Sandbox Code Playgroud)

在子包__init__.py文件中怎么样?简单地说是不对的

import moduleA
import moduleB
Run Code Online (Sandbox Code Playgroud)

或者,在/package/subA/moduleA.py中,简单地放入是不对的:

import moduleB
Run Code Online (Sandbox Code Playgroud)

python import

17
推荐指数
1
解决办法
2万
查看次数

标签 统计

python ×2

import ×1

python-import ×1

python-module ×1