2016-06-30 2 views
2

내 질문을 더 쉽게 구사할 수 없다는 것에 대해 사과드립니다. 나는 거의 모든 기능에서 판다를 광범위하게 사용하는 커다란 패키지를 작성 중이다. 나의 첫번째 본능은 자연스럽게, 내가 함수에서 팬더를 사용할 때마다이 같은 from . import pandas as pd 또는 from .. import pandas, 또는 무언가로 서브 모듈에서 그것을 부르는 __init__.py외부 패키지를 네임 스페이스에 추가하지 않고 모듈에서 한 번만 가져 오기

import pandas 
# then import my own submodules and other things 

으로 그리고 만드는 것이 었습니다.

그러나 패키지를로드 할 때 팬더가 "서브 모듈"로 표시됩니다 (예 : mypackage.pandas). 어떤 사람에게 해를 끼치 지 않지만, 맞지 않다고 생각합니다. 이 문제를 피하는 방법은 __init__.py 끝에 del pandas을 추가하는 것이고 올바른 방법은 아닌 것 같습니다. 지금은 내 __init__에서 팬더를 가져오고 잘 작동하지만 너무 반복하고 글로벌 팬더 설정 설정에서 저를 방지마다 -function-, 내부에 별도로 가져 오지에에서 그래서

.

여기서 가장 선호되는 방법은 무엇입니까? 제가 누락 된 방법이 있습니까?

감사합니다. __init__.py 전화에서 pandas을 보내고 import하여

+0

왜 'from'과 같은 작업을해야합니까? submodules에서 pdf로 pandas 가져 오기? 'pdf로 수입 팬더'의 문제점은 무엇입니까? – Aya

+0

@Aya 글쎄, 그게 내가하고있는 일이야. 그러나'__init __. py' 호출에서 팬더를 가져 와서 (pandas.options.display.expand_frame_repr'와 같은) 일부 팬더 옵션을 정의 할 수 있으며 모듈 전체에서 유효합니다. 게다가 '스크래치 (scratch)'에서 같은 패키지를 다시 가져 오는 것은 시간이 오래 걸리는 것처럼 보이지만 그게 맞는지는 잘 모르겠습니다. – TomCho

답변

2

... 나는 거기에 몇 가지 pandas '옵션을 정의 할 수 있습니다 (같은 pandas.options.display.expand_frame_repr)과 모듈에 걸쳐 유효합니다.

어쨌든됩니다. 모듈은 처음으로 import pandas에 전화 할 때만로드됩니다. 이 시점에서 모듈에 대한 참조는 sys.modules을 통해 액세스 할 수있는 모듈 사전에 저장됩니다. 이후 다른 모듈에서 import pandas을 호출하면 sys.modules에서 동일한 참조가 다시 사용되므로 변경 한 옵션도 적용됩니다.

또한 처음부터 동일한 패키지를 다시 가져 오는 데 시간이 오래 걸리는 것처럼 보이지만 올바른지 확실하지 않습니다.

상대 경로를 확인할 필요가 없으므로 실제로는 약간 빨라야합니다. 모듈이로드되면 후속 호출은 다음과 같이 작동합니다.

import pandas   # pandas = sys.modules['pandas'] 
import pandas as pd # pd = sys.modules['pandas'] 
+0

아주 좋습니다. 난 몰랐어. 간단히 말해서, 내가 이미하고있는 것 (각 기능에서 팬더를 독립적으로 호출하는 것)은 진행하는 좋은 방법입니다. 맞습니까? – TomCho

+0

@TomCho 모든 * 함수 * 또는 모든 * 하위 모듈에서 가져 오는 것이 확실하지 않습니다. – Aya

+0

나는 모든 * function *에서 그것을하고있다. 그렇지 않으면 모든 기능에서 팬더는 "하위 모듈"로 나타납니다. 그래서'mypackage.submodule.pandas'도 피하려고합니다. – TomCho