首页 > 解决方案 > 如何导入差异。python中的嵌套文件夹文件

问题描述

[结构]

 Root
  |_ app
      |_util
          |_ log.py
      |_config.py
  |_ run.py

[运行.py]

#import sys
#import os
#sys.path.insert(0, os.path.abspath('.'))

from app.config import Config

class App(object):
    def __init__(self):
        pass

    def run(self):
        Config.set_code(200)
        Config.print_code()

if __name__ == '__main__':
    app = App()
    app.run()

[配置.py]

from app.util.log import Log

class Config(object):
    code = None
    def __init__(self):
        pass

    @classmethod
    def set_code(cls, code):
        cls.code = code    

    @classmethod
    def get_code(cls):
        return cls.code

    @classmethod
    def print_code(cls):
        Log.msg()

[日志.py]

from app.config import Config

class Log(object):
    def __init__(self):
        pass

    @classmethod
    def msg(cls):
        code = Config.get_code()
        print('Code is: %r' % code)    

[电流输出]

File "C:\works\workout\tmp\app\util\log.py", line 1, in <module>
    from app.config import Config

ImportError: cannot import name 'Config' from 'app.config' (C:\works\workout\tmp\app\config.py)

[预期输出]

Code is: 200

另一个疑问,有什么方法可以将根导入修复为“应用程序”,然后通过此文件夹/子文件夹文件(任何深度)访问,

[应用程序/sub1/a.py]

 from app.util.xx import XX
 **from app.a import A**
 from app.aaa.bb import BB

 A.some_fn()

[应用程序/a.py]

 from app.util.xx import XX
 **from app.sub1.a import A**
 from app.aaa.bb import BB 

 A.some_fn()

[app/sub1/sub2/a.py]

 **from app.sub1.a import A**
 **from app.sub1.sub2.b import B**
 from app.aaa.bb import BB 

 A.some_fn()

如果有任何建议或想法,请!提前致谢,

标签: pythonooppython-import

解决方案


log.py和之间的循环依赖config.py是问题所在。很多时候可以避免循环依赖。所以我建议先尝试一下。

但是如果你想用循环依赖来做,你可以按照这里的描述来做。

对于您的解决方案,它看起来像这样。适应log.py

from app.config import Configimport app.config

code = Config.get_code()code = app.config.Config.get_code()


推荐阅读