我有一个像这样的 python 包目录:
proj/
mod_a/
__init__.py
x.py
submod_x/
__init__.py
y.py
mod_b/
__init__.py
z.py
Run Code Online (Sandbox Code Playgroud)
与 x.py:
import submod_x.y
Run Code Online (Sandbox Code Playgroud)
z.py:
import sys, os.path
sys.path.append(os.path.abspath('../'))
import mod_a.x
Run Code Online (Sandbox Code Playgroud)
现在当我跑步时:
$ python2 z.py
Run Code Online (Sandbox Code Playgroud)
我用 y.py 编码完成了事情
但是当我跑步时:
$ python3 z.py
Run Code Online (Sandbox Code Playgroud)
我有一个例外:
Traceback (most recent call last):
File "z.py", line 4, in <module>
import mod_a.x
File ".../proj/mod_a/x.py", line 1, in <module>
import submod_x.y
ImportError: No module named 'submod_x'
Run Code Online (Sandbox Code Playgroud)
我想知道Python 2和Python 3在导入包时有什么区别,以及如何在Python 3中使用绝对导入来导入位于其父目录中的包?
我认为你应该在 x.py 中执行此操作:
import mod_a.submod_x.y
Run Code Online (Sandbox Code Playgroud)
从文件位置的绝对导入是使用绝对模块名称或如下所示完成的:
from . import submod_x.y
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
7752 次 |
| 最近记录: |