为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

慕娘9325324 2021-09-11 10:14:52
所以,我有以下文件夹结构;Root/--outlook/----outlook.py--test/----test.pyoutlook.py包含一个名为Outlook.我正在尝试按如下方式导入文件中的Outlook类test.py-from .outlook import Outlookoutlook = Outlook()我正在从 Root 文件夹运行脚本 - python test/test.py这导致错误 -Traceback (most recent call last):  File "test/test.py", line 1, in <module>    from .outlook.outlook import OutlookModuleNotFoundError: No module named '__main__.outlook'; '__main__' is not a package请帮忙。
查看完整描述

2 回答

?
慕村225694

TA贡献1880条经验 获得超4个赞

仅当子模块从父模块中加载时,相对导入路径才有效:


from Root.test.test import some_function

如果您想将来自两个不同子模块的组件一起使用并作为独立脚本使用,我建议使用非相对导入路径:


from Root.outlook.outlook import Outlook

您需要将模块 Root 放在 PYTHON_PATH 环境变量中包含的文件夹中


也不要忘记将init .py添加到所有文件夹


some_directory/

    Root/

        __init__.py

        outlook/

            __init__.py

            outlook.py

        test/

            __init__.py

            test.py

EDIT1:

根据您想从 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


查看完整回答
反对 回复 2021-09-11
  • 2 回答
  • 0 关注
  • 210 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信