原创由于python的导入方式引起的深坑

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了原创由于python的导入方式引起的深坑相关的知识,希望对你有一定的参考价值。

目录结构:

test/

  sacc/

    __init__.py

    app.py

    logger.py

    /views

      __init__.py

      main.py

 

事情是这样的,logger里面是一个类LoggerFactory, 这个类里面有一个类变量保存着日志logger,同时有一个get函数和一个init函数,init函数负责初始化,get负责获取这个logger。

我在app.py初始化之后,并在随后的处理过程中打印了日志,app.py调用了main.py的函数,在main.py里面的函数中首先通过LoggerFactory调用get获取logger,然后打印输出。

出现了问题:

  在main里面获取的是None。

 

原因:

  我在app.py使用 from logger import LoggerFactory 导入LoggerFactory

  在main里面使用from sacc.logger import LoggerFactory 导入,sacc的父目录已经加入sys.path,所以是可以加载的。

  这俩种方式导入会导致在sys.modules中是俩个不同的模块,使用id(module_or_class)可以判断这俩个是不容的对象,因此导致main.py获取到的logger为None

 

附:

Python import 的搜索路径

  • 在当前目录下搜索该模块
  • 在环境变量 PYTHONPATH 中指定的路径列表中依次搜索
  • 在 Python 安装路径的 lib 库中搜索

 

以上是关于原创由于python的导入方式引起的深坑的主要内容,如果未能解决你的问题,请参考以下文章

由于sys.argv [0]引起的属性错误,因为c中的'import tensorflow as tf'

python库: scrapy (深坑未填)

python3导入paramiko模块

原创jquery插件treeTable(转)

模块简介模块的两种导入语句导入文件的补充判断文件类型模块的查找顺序

写给新手的Python导入机制详解