为什么我不能从 Python 3.4 中的 PYTHONPATH 导入模块?
Why can't I import modules from my PYTHONPATH in Python 3.4?
我在 /u/home/j/joelfred/python-dev-modules
中安装了一个软件包。看起来像:
/a
__init__.py
b.py
b.py
的来源很简单:
def hello():
print('hi yourself')
对于__init__.py
:
import b
首先,我确保我在我的主目录中,然后设置我的 PYTHONPATH:
$ cd
$ export PYTHONPATH=/u/home/j/joelfred/python-dev-modules/
那我运行python3
:
$ python3
Python 3.4.3 (default, Mar 18 2015, 17:28:34)
[GCC 4.4.7 20120313 (Red Hat 4.4.7-11)] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import a
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/u/home/j/joelfred/python-dev-modules/a/__init__.py", line 1, in <module>
import b
ImportError: No module named 'b'
好吧,这很奇怪。但是,如果我将 __init__.py
更改为空白:
$ python3
Python 3.4.3 (default, Mar 18 2015, 17:28:34)
[GCC 4.4.7 20120313 (Red Hat 4.4.7-11)] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import a.b as b
>>> b.hello()
hi yourself
>>>
这到底是怎么回事?
在 Python 3 中,所有导入都是绝对的。你不能做 import b
,除非 b
本身是 sys.path
上可用的顶级 module/package。如果要从 a
内部导入 b
,请使用显式相对导入:
from . import b
我在 /u/home/j/joelfred/python-dev-modules
中安装了一个软件包。看起来像:
/a
__init__.py
b.py
b.py
的来源很简单:
def hello():
print('hi yourself')
对于__init__.py
:
import b
首先,我确保我在我的主目录中,然后设置我的 PYTHONPATH:
$ cd
$ export PYTHONPATH=/u/home/j/joelfred/python-dev-modules/
那我运行python3
:
$ python3
Python 3.4.3 (default, Mar 18 2015, 17:28:34)
[GCC 4.4.7 20120313 (Red Hat 4.4.7-11)] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import a
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/u/home/j/joelfred/python-dev-modules/a/__init__.py", line 1, in <module>
import b
ImportError: No module named 'b'
好吧,这很奇怪。但是,如果我将 __init__.py
更改为空白:
$ python3
Python 3.4.3 (default, Mar 18 2015, 17:28:34)
[GCC 4.4.7 20120313 (Red Hat 4.4.7-11)] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import a.b as b
>>> b.hello()
hi yourself
>>>
这到底是怎么回事?
在 Python 3 中,所有导入都是绝对的。你不能做 import b
,除非 b
本身是 sys.path
上可用的顶级 module/package。如果要从 a
内部导入 b
,请使用显式相对导入:
from . import b