Interactive Python - 相对导入的解决方案

时间:2016-07-20 19:04:58

标签: python python-2.7 ipython ipython-notebook jupyter-notebook

来自Python relative imports for the billionth time

  • 要使from .. import生效,模块的名称必须至少与import语句中的点一样多。
  • ...如果您以交互方式运行解释器...该交互式会话的名称为__main__
  • 因此,您无法直接从交互式会话中进行相对导入

我喜欢在编写生产代码之前使用交互式Jupyter Notebook会话来探索数据和测试模块。为了让团队成员清楚易懂,我喜欢将笔记本放在我正在测试的软件包和模块旁边的interactive包中。

package/

    __init__.py

    subpackage1/

        __init__.py

        moduleX.py

        moduleY.py

        moduleZ.py

    subpackage2/

        __init__.py

        moduleZ.py

    interactive/
        __init__.py
        my_notebook.ipynb

interactive.my_notebook.ipynb的互动会话中,您如何导入其他模块,例如subpackage1.moduleXsubpackage2.moduleZ

1 个答案:

答案 0 :(得分:2)

我目前使用的解决方案是将父包附加到sys.path

import sys
sys.path.append("/Users/.../package/")

import subpackage1.moduleX
import subpackage2.moduleZ