python runtimewarning_Python 3.6项目结构导致RuntimeWarning

对于这种特殊情况,双重导入警告是由于proj / __ init__.py中的这一行:

from .proj import main

该行的含义是,当-m开关实现完成导入项目步骤时,proj.proj已被导入,作为导入父包的副作用.

避免警告

要避免警告,您需要找到一种方法来确保导入父包不会隐式导入使用-m开关执行的包.

解决这两个问题的两个主要选择是:

>删除.proj导入主线(如@John Moutafis建议的那样),假设可以在不破坏API兼容性保证的情况下完成;要么

>从proj子模块中删除if __name__ ==“__ main__”:块并将其替换为一个单独的proj / __ main__.py文件:

from .proj import main

main()

如果使用选项2,那么命令行调用也将更改为python -m proj,而不是引用子模块.

选项2的更向后兼容的变体是添加__main__.py而不从当前子模块中删除CLI块,并且当与DeprecationWarning结合时,这可能是一种特别好的方法:

if __name__ == "__main__":

import warnings

warnings.warn("use 'python -m proj', not 'python -m proj.proj'", DeprecationWarning)

main()

如果proj / __ main__.py已经被用于其他目的,那么你也可以用python -m proj.proj_cli替换python -m proj.proj,其中proj / proj_cli.py如下所示:

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值