python - 如何导入差异。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()
如果有任何建议或想法,请!提前致谢,
解决方案
log.py
和之间的循环依赖config.py
是问题所在。很多时候可以避免循环依赖。所以我建议先尝试一下。
但是如果你想用循环依赖来做,你可以按照这里的描述来做。
对于您的解决方案,它看起来像这样。适应log.py
:
from app.config import Config
至import app.config
和
code = Config.get_code()
至code = app.config.Config.get_code()
推荐阅读
- python-3.x - pyspark 排序从重复运行的不同值开始
- javascript - 使用 'overflow: hidden' (CSS) 和 jQuery 来防止用户滚动加载页面
- android - NavigationComponents 透明工具栏
- python - 获取与指定用户名相关的 Jenkins 构建信息
- c# - 在引用上使用 == 时发出警告(Visual Studio 或 ReSharper)
- airflow - 如何在通过命令行设置时在 Airflow 中的变量值中包含空格?
- excel - Excel 按产品名称分组和匹配
- c# - In .NET, is it appropriate to invoke BeginSendTo in the callback?
- algorithm - 迷宫解决 - 圆形路径问题
- javascript - 基于 URL 为网站提供多种语言