相关疑难解决方法(0)

Python模块的绝对与显式相对导入

我想知道在Python应用程序中导入包的首选方法.我有这样的包结构:

project.app1.models
project.app1.views
project.app2.models
Run Code Online (Sandbox Code Playgroud)

project.app1.views进口project.app1.modelsproject.app2.models.有两种方法可以实现这一点.

绝对进口:

import A.A
import A.B.B
Run Code Online (Sandbox Code Playgroud)

或者使用PEP 328Python 2.5中引入的显式相对导入:

# explicit relative
from .. import A
from . import B
Run Code Online (Sandbox Code Playgroud)

什么是最pythonic的方式来做到这一点?

python package python-import

73
推荐指数
3
解决办法
4万
查看次数

何时使用绝对导入

我正在改变一堆旧的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

package ×1

python-import ×1