我遇到了在包的模块中导入__init__.py
和使用import as
绝对导入的问题.
我的项目有一个子包,在其中__init__.py
我将一个类从一个模块"提升"到带有from import as
语句的子包级别.该模块使用绝对导入从该子包导入其他模块.我收到这个错误AttributeError: 'module' object has no attribute 'subpkg'
.
结构:
pkg/
??? __init__.py
??? subpkg
? ??? __init__.py
? ??? one.py
? ??? two_longname.py
??? tst.py
Run Code Online (Sandbox Code Playgroud)
pkg/__ init__.py为空.
pkg/subpkg/__ init__.py:
from pkg.subpkg.one import One
Run Code Online (Sandbox Code Playgroud)
pkg/subpkg/one.py:
import pkg.subpkg.two_longname as two
class One(two.Two):
pass
Run Code Online (Sandbox Code Playgroud)
pkg/subpkg/two_longname.py:
class Two:
pass
Run Code Online (Sandbox Code Playgroud)
pkg/tst.py:
from pkg.subpkg import One
print(One)
Run Code Online (Sandbox Code Playgroud)
输出:
$ python3.4 -m pkg.tst
Traceback (most recent …
Run Code Online (Sandbox Code Playgroud) 在阅读fastapi的源代码时,这一行让我很模糊:
from starlette.testclient import TestClient as TestClient
Run Code Online (Sandbox Code Playgroud)
为什么不只是:from starlette.testclient import TestClient
?
我正在浏览代码库并注意到以下导入模块的样式
import torch.nn as nn
在我个人的工作中,我一直使用以下方法
from torch import nn
这两种导入方式有什么区别吗?
我一直使用from a import b
,但最近一个团队在工作决定一个模块移动到一个新的命名空间,并发出警告通知,告诉人们,以取代import b
用import a.b as b
.
我从未使用过import as
,我能找到的唯一文档似乎表明它不支持import a.b as b
,但显然它确实如此.
但实际上是否存在差异,如果是这样的话?