交互式Python - 相对导入的解决方案

3

来自Python相对导入问题的解答

  • 要让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个回答

3
我目前使用的解决方案是将父包附加到sys.path
import sys
sys.path.append("/Users/.../package/")

import subpackage1.moduleX
import subpackage2.moduleZ

1
我认为将package的父目录添加到sys.path会更有意义。这样,您就可以始终执行from package.subpackageN import moduleZ - theorifice

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接