【发布时间】:2014-10-06 15:21:21
【问题描述】:
我对 import 语句在 IPython 中的工作方式感到有些困惑。我通过网络搜索一无所获。
隐式相对导入适用于 Python 2,但我不知道 IPython for Python 3 是否仍然如此。
使用点语法的相对导入似乎根本不起作用:
In [6]: ls
dsp/ __init__.py __init__.pyc utils/
In [7]: from .utils import capture
---------------------------------------------------------------------------
ValueError Traceback (most recent call last)
<ipython-input-7-e7d50007bdd1> in <module>()
----> 1 from .utils import capture
ValueError: Attempted relative import in non-package
导入使用点语法的模块似乎是不可能的:
In [8]: cd utils
/home/user/workspace/mypkg/mypkg/utils
In [9]: ls
capture/ capture.py capture.pyc cext/ __init__.py __init__.pyc
In [10]: from capture import Capture
---------------------------------------------------------------------------
ValueError Traceback (most recent call last)
<ipython-input-10-8c31c76d052d> in <module>()
----> 1 from capture import Capture
/home/user/workspace/mypkg/mypkg/utils/capture.py in <module>()
17 import tarfile
18 import re
---> 19 from .. import utils
20 from . import flprint
21 from select import poll
ValueError: Attempted relative import in non-package
在某个地方是否有一些简明的文档?
【问题讨论】:
-
IPython 导入只是常规的 Python 导入,但是在包中运行它是有问题的,因为 Python 不会将工作目录视为包。 cd 上几个级别,所以你可以做
from mypkg.utils.capture import Capture,它应该会正常运行。 -
我想我明白了。我将当前工作目录与模块在包层次结构中的位置混淆了。
-
是的,
from . import blah仅在您在包中时才有效。它不只是在该文件所在的目录中查找。
标签: python ipython relative-path python-packaging