python工程中import要点提炼

目前笔者正在用python开发的工程,目录这样组织

project/						# 项目目录
    lib1/						# 与数据导入,解析,计算有关的功能
        __init__.py
        dataload.py				# 包含有 load函数
        dataspar.py
        compute.py				# 包含有 compute函数
        ...
    lib2/						# 数据导入耗时,计算用的模型
        __init__.py
        model.py				# 包含有 model 类
        time.py
        ...
    doc/						# 项目文档目录
    app.py						# 主要功能的集成,内部测试用
    servicecase.py				# 主要功能的集成,对外服务用
    README.md   

这个工程中模块之间有这样的依赖关系:

  1. 同一个子目录之间有依赖,lib1中的 compute 中要依赖 dataload 模块

  2. 不同的子目录之间有依赖,lib1中的 compute 要依赖 lib2中的 model 模块

  3. 父目录对子目录有依赖,app 和servicecase 要依赖 lib1 中 的compute 模块

解决方式:

  1. 同一个子目录之间导入,compute 导入dataload 的 load 函数。使用相对导入
from .dataload import load # 在compute.py中

注意,这里需要加.,限定在当前./lib1目录中寻找dataload模块。

  1. 不同子目录之间导入,compute 导入 model 中的 model 类。将上级目录加入搜索路径后导入
import sys # 在compute.py中
sys.path.append('..')
from lib2.model import model

注意sys.path.append这句是将上一级目录,即./project目录加入库搜索路径。然后问题就转化为,如何在父目录导入子目录内的类或函数,请查看下一条。

  1. 父目录导入子目录的类或函数,import 包名.模块 即可
from lib1.compute import compute # 在servicecase.py中

总结

主要留意解决方式中的第1,2点,相信这也是很多人能看到这里的原因。主打一个信息提炼,没有废话,就是情景展示vs解决方式。如果还不能解决你的问题,请留言讨论。

参考文档

Python-import导入上级目录文件

Python项目如何合理组织规避import天坑

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值