猿问

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

我只想能够通过执行 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.py

main.py 的内容:


import func1

func1.main()


# [works] execute function (func2) stored in another folder (folder2)

import folder2.func2

folder2.func2.main()


# [works] execute function (func2) stored in another folder (folder3)

import folder2.folder3.func3

folder2.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.func2B

folder2.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()


隔江千里
浏览 128回答 2
2回答

HUWWW

我想以更概括的方式再次提出我的问题我得到了这个文件夹结构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()再次感谢

精慕HU

在您的文件func2B.py 中,您应该导入 func3import folder3.func3def main():    print('executing func2B, which executes func3')    func3.main()if __name__ == '__main__':    main()否则,您的脚本将不知道函数func3并引发错误。编辑尝试将 folder2 添加到 main.py 中的 sys.pathimport syssys.path.append('folder2')import func1func1.main()......
随时随地看视频慕课网APP

相关分类

Python
我要回答