关于Python中不同文件夹的函数相互调用的问题

前言

博主最近在弄Python相关的东西,想将YOLOv3部署到flask上做个小demo,结果在flask调用yolo函数时频繁出现问题。百度上找了好多博客还是感觉没搞清楚就自己做了个套娃调用,给大家分享一下

结果截图

在这里插入图片描述
在这里插入图片描述
如图,每个文件夹中都有一个hello.py,其中代码我后面会贴出来。最后效果就是upload里的hello.py调用test2中的hello.py,test2中的hello.py调用test3中的hello.py,test3中的hello.py调用test4中的hello.py,简单说就是套娃。博主写这个demo就是想测试能不能调用离启动目录很远的子文件中的函数,现在证明是可以的

源码展示

test4中hello.py写的是:

def hello_test():
    print('hello world for test4')
    return 'test4'

test3中hello.py写的是:

from test2.test3.test4 import hello

def hello_test():
    print('hello world for test3 ' + hello.hello_test())
    return 'test3'

test2中hello.py写的是:

from test2.test3 import hello

def hello_test():
    print('hello world for test2 ' + hello.hello_test())
    return 'test2'

test中hello.py写的是:

from test2 import hello

print('hello world ' + hello.hello_test())

原理

从每个hello.py中不能发现 想调用子文件夹的子文件夹中的函数,必须先找到这个模块。怎么找那?很简单,以启动目录为根目录,去寻找。
好比我现在在D:\Python\flask\upload这个目录里启动 hello.py,那么我们的根目录就是现在这个目录。那当文件要调用test2中的hello里的函数,就要先找到它,也就是from test2(这个文件夹)import hello(这个模块)。而这个模块有hello_test()的函数,调用就可以了。
同理,对于test2,它要调用test3时,那么在test2中需要从根目录找到要调用的test3中的hello.py的模块,即 from test2(这个文件夹) 下的 test3(文件夹)import hello(这个模块)
test3也同理

其实每个文件前面的from … import hello 要想好怎么从根目录导入
我的demo中根目录是 D:\Python\flask\upload
那么想调用 D:\Python\flask\upload\test2 中的hello 就是
from test2 import hello

再简单点说
test2.test3.test4 就相当于 根目录/test2/test3/test4
这时再import 就相当于在 根目录/test2/test3/test4 寻找对应模块

希望能对大家有帮助

当然我在看博客的时候也有提到很多方法,包括创建 _ _ init_ _.py
还有用 sys.path.append 去添加路径
但我没完全搞懂这些方法就不班门弄斧了

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值