简体   繁体   English

在 Python 模块中导入子模块

[英]Import a submodule in a Python module

I have already read Python: importing a sub‑package or sub‑module but this:我已经读过Python: importing a sub-package or sub-module但是这个:

file                                content
============================================================================
main.py                             from mymodule.a import A; A()
mymodule/submodule/__init__.py      (empty)
mymodule/submodule/b.py             class B: pass
mymodule/__init__.py                (empty)
mymodule/a.py                       (see below)

mymodule/a.py : mymodule/a.py

import submodule
class A:
    def __init__(self):
        self.b = submodule.B()

fails with:失败:

File "a.py", line 1, in文件“a.py”,第 1 行,在
import submodule导入子模块
ModuleNotFoundError: No module named 'submodule' ModuleNotFoundError:没有名为“子模块”的模块

when lauching the script main.py .启动脚本main.py时。

Question: how should I import submodule in mymodule/a.py ?问题:我应该如何在mymodule/a.py中导入submodule

TLDR: TLDR:

mymodule/a.py : mymodule/a.py

from . import submodule
# or
import mymodule.submodule as submodule

Once you run your main.py , python adds to your sys.path the path to main.py folder.运行main.py ,python 会将main.py文件夹的路径添加到sys.path中。 Python can now search subfolders to find modules trying to be imported. Python 现在可以搜索子文件夹以查找尝试导入的模块。 Once you import a.py , python DOES NOT add anything else to sys.path , therefore, to be able import subfolders, you need to do either relative importing ( from . import submodule ), which you can do because you aren't running a.py as your main file, OR do a full import, doing import mymodule.submodule , since python can search starting on main.py folder.导入a.py ,python 不会向sys.path添加任何其他内容,因此,为了能够导入子文件夹,您需要执行相对导入( from . import submodule ),因为您没有运行,所以您可以这样做a.py作为你的主文件,或者做一个完整的导入,做import mymodule.submodule ,因为 python 可以从main.py文件夹开始搜索。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM