【问题标题】:Interactive Python - solutions for relative imports交互式 Python - 相对导入的解决方案
【发布时间】:2016-11-24 03:19:54
【问题描述】:

来自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

【问题讨论】:

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


    【解决方案1】:

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

    import sys
    sys.path.append("/Users/.../package/")
    
    import subpackage1.moduleX
    import subpackage2.moduleZ
    

    【讨论】:

    • 我认为将package 的父目录添加到sys.path 会更有意义。这样你总是可以做from package.subpackageN import moduleZ
    猜你喜欢
    • 2012-02-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-12-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多