Python相对/绝对导入(再次)
发布时间:2020-12-20 13:12:30 所属栏目:Python 来源:网络整理
导读:这个主题已被多次介绍过,但我还是无法让我的包工作. 情况就是这样:我有一个包,其中一个日志记录模块负责设置日志记录. 很明显,mypackage.logging与标准库中的 Python日志记录冲突. 目录’结构: ├── mypackage│?? ├── __init__.py│?? ├── loggin
这个主题已被多次介绍过,但我还是无法让我的包工作.
情况就是这样:我有一个包,其中一个日志记录模块负责设置日志记录. 很明显,mypackage.logging与标准库中的 Python日志记录冲突. 目录’结构: ├── mypackage │?? ├── __init__.py │?? ├── logging.py └── script.py mypackage的.__ init__ import logging from . import logging as _logging logger = logging.getLogger(__name__) def main(): _logging.init_logging() logger.info("hello") mypackage.logging """logging - Setup logging for mypackage.""" import copy import logging import logging.config _DEFAULT_LOGGING_CONFIG_DICT = { 'version': 1,'formatters': { 'verbose': { 'format': '%(asctime)s - %(name)s::%(levelname)s: %(message)s',},'simple': { 'format': '-- %(message)s','handlers': { 'console': { 'class': 'logging.StreamHandler','level': 'DEBUG','formatter': 'simple','file': { 'class': 'logging.FileHandler','filename': 'oprpred.log','mode': 'w','formatter': 'verbose','loggers': { 'oprpred': { 'level': 'INFO','root': { 'level': 'INFO','handlers': ['console','file'],} def init_logging(verbose=False): """Initialize logging. Set the log level to debug if verbose mode is on. Capture warnings. """ d = default_logging_dict() if verbose: d['root']['level'] = 'DEBUG' d['loggers']['oprpred']['level'] = 'DEBUG' logging.config.dictConfig(d) logging.captureWarnings(True) def default_logging_dict(): return copy.deepcopy(_DEFAULT_LOGGING_CONFIG_DICT) script.py import mypackage mypackage.main() 最后,这是我得到的错误消息: $python3 script.py [11:09:01] Traceback (most recent call last): File "script.py",line 4,in <module> mypackage.main() File "/Users/benoist/Desktop/test_logging/mypackage/__init__.py",line 8,in main _logging.init_logging() AttributeError: module 'logging' has no attribute 'init_logging' 最后一点,我注意到如果在mypackage .__ init.py__中我在标准库日志记录之前导入mypackage.logging,它就可以了.
任何帮助将不胜感激. 本. 附:我正在使用Python 3.5.1. 解决方法
我处理使用自定义日志记录模块这一特定问题的方法是将所有日志记录功能导入我的自定义模块.现在,您还可以使用自定义版本重新实现模块级功能.
例如: """logging - Setup logging for mypackage.""" import copy from logging import * import logging.config _DEFAULT_LOGGING_CONFIG_DICT = { ... } def init_logging(verbose=False): ... def default_logging_dict(): ... 现在您只需要导入自定义模块. from . import logging log = logging.getLogger() 使用from logging import *的替代方法是从内置日志记录模块重新实现任何常用函数. import copy import logging def getLogger(*args,**kwargs): logging.getLogger(*args,**kwargs) 如果您需要访问尚未重新实现的日志记录功能,则可以调用内置日志记录模块,例如:logging.logging.addLevelName(…). (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |