2016-08-18 6 views
0

Python 모듈을 가져 오는 방법과 관련하여 절대적 또는 명시 적 상대 가져 오기 (예 : here)를 사용할지 여부와 관련하여 많은 질문이 제기되었습니다. Python Software Foundation에서 제안한 가져 오기 스타일은 here입니다. 즉, 절대적으로 가져올 것을 권장합니다.Python 모듈의 절대 및 상대적 가져 오기 : matplotlib 예제

저는 matplotlib을 개발 한 사람들이 자신이하는 일을 알고 있다고 가정하기 때문에이 질문을 쓰고 있습니다.

이 가정을 감안할 때 내가 수입이 이가지 사이의 주요/명백한 차이점을 이해 가정,이 같은 것을 쓸하기 matplotlib의 개발자에 영향을 그들 사이의 작은 차이를 이해에 관심이있을 것입니다 :

import matplotlib 
import matplotlib.cbook as cbook 
from matplotlib.cbook import mplDeprecation 
from matplotlib import docstring, rcParams 
from .transforms import (Bbox, IdentityTransform, TransformedBbox, 
         TransformedPath, Transform) 
from .path import Path 

matplotlib 모듈 (예 : matplotlib.artist) 안에 포함 된 artist.py의 시작 부분입니다. 나는 matplotlib-1.5.1을보고있다.

모듈 matplotlib.cbook, matplotlib.transformsmatplotlib.path에주의를 집중하고 싶습니다. 이 세 파일 모두 순수한 Python 모듈입니다 (예 : module_name.py 파일).

from .cbook import mplDeprecation 대신 이 선택되었고 이유는 from .path import Pathfrom matplotlib.path import Path 인 이유는 무엇입니까?

아마도 특별한 이유가 없으며 이러한 선택은 다른 개발자의 다양한 스타일을 반영합니다. 아마도 내가 빠진 것이있을 것입니다.

답변

1

matplotlib 코드베이스에 대해 기억해야 할 중요한 점은 매우 오래된 것 (2003 년부터 git 히스토리를 가지고 있고 또 다른 몇 년을 잃어 버렸습니다), 커다란 (93k 라인의 파이썬, 17k 라인의 C++) 450 명이 넘는 기고가가 있습니다.

(2.x는 지점 떨어져 있지만 수입은 꽤 안정적) 자식 비난을 살펴 갖는 보여줍니다

08:29 $ git blame matplotlib/artist.py | head -n 18 


5fca7e31 (Thomas A Caswell   2013-09-25 11:36:00 -0500 1) from __future__ import (absolute_import, division, print_function, 
5fca7e31 (Thomas A Caswell   2013-09-25 11:36:00 -0500 2)       unicode_literals) 
f4adec7b (Michael Droettboom  2013-08-14 10:18:10 -0400 3) 
07e22753 (Matthew Brett   2016-06-06 12:08:35 -0700 4) import six 
0ea5fff3 (Thomas A Caswell   2015-12-01 14:40:34 -0500 5) from collections import OrderedDict 
f4adec7b (Michael Droettboom  2013-08-14 10:18:10 -0400 6) 
453e0ece (Nelle Varoquaux   2012-08-27 23:16:43 +0200 7) import re 
453e0ece (Nelle Varoquaux   2012-08-27 23:16:43 +0200 8) import warnings 
731f6c86 (Michael Droettboom  2013-09-27 09:59:48 -0400 9) import inspect 
e1d30c85 (Jens Hedegaard Nielsen 2015-08-18 19:52:48 +0100 10) import numpy as np 
b44e8f20 (John Hunter    2008-12-08 23:28:55 +0000 11) import matplotlib 
99b89a87 (John Hunter    2008-06-03 20:28:14 +0000 12) import matplotlib.cbook as cbook 
c137a718 (Thomas A Caswell   2014-11-23 00:37:28 -0500 13) from matplotlib.cbook import mplDeprecation 
527b7d9a (Michael Droettboom  2010-06-11 18:17:52 +0000 14) from matplotlib import docstring, rcParams 
b2408c33 (Cimarron Mittelsteadt 2014-09-12 15:58:25 -0700 15) from .transforms import (Bbox, IdentityTransform, TransformedBbox, 
b2408c33 (Cimarron Mittelsteadt 2014-09-12 15:58:25 -0700 16)       TransformedPath, Transform) 
f4adec7b (Michael Droettboom  2013-08-14 10:18:10 -0400 17) from .path import Path 
f2a0c7ae (John Hunter    2007-03-20 21:48:31 +0000 18) 

당신은이 라인은 마지막으로 사람들의 수 (감동 된 것을 볼 수 있습니다 분명히 나를 포함해서).

이 차이를 너무 많이 읽지는 ​​않겠지 만, 다이빙을 원할 경우 커밋 메시지를 살펴보십시오.

+0

좋아, 나는 다른 개발자의 취향 만다고 생각해. 아마도 당신은 우리에게 당신에 대해 말할 수 있습니다 : 왜'.cbook ... '이 아닌'matplotlib.cbook ...'을 선택 했습니까? – Gioker

+0

@Gioker 솔직히 기억이 안납니다. pep8은 절대적인 수입을 제안하며 더 명백합니다. – tacaswell

관련 문제