이 항목은 여러 번 다루어졌지만 여전히 패키지가 작동하지 않습니다. 여기에 상황이 있습니다 : logging
모듈이 로깅 설정을 담당하는 패키지가 있습니다. 분명히 mypackage.logging
은 표준 라이브러리의 Python logging
과 충돌합니다.Python 상대/절대 가져 오기 (다시)
디렉토리 '구조 :
"""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을 mypackage.logging
import logging
from . import logging as _logging
logger = logging.getLogger(__name__)
def main():
_logging.init_logging()
logger.info("hello")
init__
├── mypackage
│ ├── __init__.py
│ ├── logging.py
└── script.py
myPackage에 .__
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
전에 표준 라이브러리 logging
에 가져 오면, 작동 것으로 나타났습니다. 이 파이썬 PEP8의 recommandations에 대해이기 때문에 나는 그렇게하고 싶지 않아 :
수입은 다음과 같은 순서로 그룹화해야 :
- 표준 라이브러리 수입
- 관련 타사 수입
- 로컬 응용 프로그램/라이브러리 별 가져 오기
도움을 주시면 대단히 감사하겠습니다.
벤.
P. 파이썬 3.5.1을 사용하고 있습니다.
표준 로깅 모듈을'_logging' 및 자신의 로깅 모듈을'logging'으로 임포트하면 작동합니다. 일반적으로,'__init __. py'에서 자신의 패키지에서 가져온 것들은 실제 이름으로 가져와야하며, 그 이름을 아무 것도 가리 지 말아야합니다. 필자는 Python 3을 설치하지 않아도 테스트 할 수 있습니다. – user2357112