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

如何从不同的子目录导入模块

如何从不同的子目录导入模块

隔江千里 2022-05-19 14:26:43
我只想能够通过执行 func2B.py 和执行 main.py(main.py 执行 func2B.py)来执行文件 func2B.py。当我尝试这样做时,我会收到几个错误,例如“没有名为...的模块”或“未定义 func3”,具体取决于我在不同的init .py 文件中插入的内容。我尝试了许多不同导入的组合,但我不知道如何正确设置导入。我使用 python 3.6 和 Win10 机器。我有以下文件结构:folder1\    __init__.py # empty file    main.py    func1.py     folder2\        __init__.py # empty file        func2.py        func2B.py        folder3\            __init__.py # empty file            func3.pymain.py 的内容:import func1func1.main()# [works] execute function (func2) stored in another folder (folder2)import folder2.func2folder2.func2.main()# [works] execute function (func2) stored in another folder (folder3)import folder2.folder3.func3folder2.folder3.func3.main()# [doesn't work] execute function (func2B) stored in another folder (folder2)# [doesn't work] the function (func2B) calls another function (func3)import folder2.func2Bfolder2.func2B.main()func1.py 的内容def main():    print('executing func1')if __name__ == '__main__':    main()func2.py 的内容def main():    print('executing func2')if __name__ == '__main__':    main()func2B.py 的内容def main():    print('executing func2B, which executes func3')    func3.main()if __name__ == '__main__':    main()func3.py 的内容def main():    print('executing func3')if __name__ == '__main__':    main()
查看完整描述

2 回答

?
HUWWW

TA贡献1874条经验 获得超12个赞

我想以更概括的方式再次提出我的问题


我得到了这个文件夹结构


folder1\

    __init__.py # empty file

    main.py

    func1.py 

    folder2\

        __init__.py # empty file

        func2.py

        func2B.py

        folder3\

            __init__.py # empty file

            func3.py

我的目标是能够同时执行 func2B.py 和 main.py(其中包含 func2B.py),而不必每次我想执行一个文件或另一个文件时都更改代码。简而言之,我试图在不更改代码的情况下从放置在不同位置的两个不同文件执行 func2B.py。


代码的显示方式,我可以执行main.py。我不知道这是否可能,也许我需要修改路径,或者我可以用正确的输入填充init .py 文件(尝试不成功)


main.py 的内容:


import folder2.func2B # uncomment to be able to execute main.py (1/2)

folder2.func2B.main() # uncomment to be able to execute main.py (2/2)

func2B.py 的内容


import folder2.folder3.func3 # uncomment to be able to execute main.py (1/2)

#import folder3.func3 # uncomment to be able to execute func2B.py (1/2)


def main():

    print('executing func2B, which executes func3')

    # folder2.folder3.func3.main() # uncomment to be able to execute main.py (2/2)

    # folder3.func3.main() # uncomment to be able to execute func2B.py (2/2)


if __name__ == '__main__':

    main()

func3.py 的内容(无关):


def main():

    print('executing func3')


if __name__ == '__main__':

    main()

再次感谢


查看完整回答
反对 回复 2022-05-19
?
精慕HU

TA贡献1845条经验 获得超8个赞

在您的文件func2B.py 中,您应该导入 func3


import folder3.func3


def main():

    print('executing func2B, which executes func3')

    func3.main()


if __name__ == '__main__':

    main()

否则,您的脚本将不知道函数func3并引发错误。


编辑


尝试将 folder2 添加到 main.py 中的 sys.path


import sys

sys.path.append('folder2')


import func1

func1.main()

...

...


查看完整回答
反对 回复 2022-05-19
  • 2 回答
  • 0 关注
  • 97 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号