我有一个像这样的Python包目录:
proj/
mod_a/
__init__.py
x.py
submod_x/
__init__.py
y.py
mod_b/
__init__.py
z.py
使用 x.py:
import submod_x.y
z.py:
import sys, os.path
sys.path.append(os.path.abspath('../'))
import mod_a.x
现在当我运行以下命令时:
$ python2 z.py
我把y.py中的任务完成了。
但是当我运行时:
$ python3 z.py
我得到了一个异常:
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'
我想知道Python 2和Python 3在导入包时有什么不同,并且如何在Python 3中使用绝对导入从其父目录导入位于包中的模块?
proj
在sys.path上或者Lib/site-packages
包含一个名为proj.pth
的文件,其中包含proj
的绝对路径,则第一种选项将起作用。我选择后者,因为它允许我在多个site-packages
中“安装”我的所有Python项目目录,而无需复制。 - Terry Jan Reedy