如何在 Python 3 中将类从一个子文件夹导入到另一个子文件夹中?

所以,我有以下文件夹结构;


Root/

--outlook/

----outlook.py

--test/

----test.py

outlook.py包含一个名为Outlook.


我正在尝试按如下方式导入文件中的Outlook类test.py-


from .outlook import Outlook


outlook = Outlook()

我正在从 Root 文件夹运行脚本 - python test/test.py


这导致错误 -


Traceback (most recent call last):

  File "test/test.py", line 1, in <module>

    from .outlook.outlook import Outlook

ModuleNotFoundError: No module named '__main__.outlook'; '__main__' is not a package

请帮忙。


慕娘9325324
浏览 211回答 2
2回答

慕村225694

仅当子模块从父模块中加载时,相对导入路径才有效:from Root.test.test import some_function如果您想将来自两个不同子模块的组件一起使用并作为独立脚本使用,我建议使用非相对导入路径:from Root.outlook.outlook import Outlook您需要将模块 Root 放在 PYTHON_PATH 环境变量中包含的文件夹中也不要忘记将init .py添加到所有文件夹some_directory/&nbsp; &nbsp; Root/&nbsp; &nbsp; &nbsp; &nbsp; __init__.py&nbsp; &nbsp; &nbsp; &nbsp; outlook/&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; __init__.py&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; outlook.py&nbsp; &nbsp; &nbsp; &nbsp; test/&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; __init__.py&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; test.pyEDIT1:根据您想从 test.py 内部导入的方式,您可能会面临 2 种不同的情况from Root.outlook.outlook import Outlook将要求 python 可以访问“Root”目录PYTHON_PATH="...:...:/path_to_some_directory_that_contains_Root"尽管from outlook.outlook import Outlook将需要PYTHON_PATH="...:...:/path_to_Root"... 表示环境变量中已经存在的其他路径,您应该保持原样。'添加到 PYTHON_PATH 代表手动方式快速达到您想要的结果。实际上,在使用模块时应该做的是安装它,通过在 Root 目录和命令中使用带有 disutils 的“setup.py”脚本python setup.py install
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python