2013-10-29 3 views
8

다양한 작업을 위해 몇 가지 모듈을 사용하는 모듈을 만들었습니다. IPython에서 모듈을 가져오고 자동 완성을 위해 사용 가능한 함수를 나열하면이 외부 모듈이 해당 목록에 포함됩니다. 어떤 방법으로 그들을 숨길 수 있습니까?인터프리터에 가져온 모듈 숨기기

+0

어떤 AFAIK,하지만 난 더 IPython 전문가는 아니지만. 못생긴 해결 방법은 언급 한 모듈에서 * 원하는 것을 가져 와서 다른 모듈 대신이 새로운 모듈을 사용하는 새로운 모듈을 만드는 것입니다. 그러나 다른 해결 방법은 '가져 오기'의 이름을 바꾸는 것입니다. 예를 들어'moduleA'를 도우미로 사용한다면'import moduleA as _moduleA'를 실행하십시오. 그러면 자동 완성은 '_'로 시작하는 속성에 액세스하려는 경우에만 문제가됩니다. – Bakuriu

답변

8

파이썬에서 모듈은 사람이하는 경우 가져와야합니다 이름 목록이있는 __all__ 변수를 정의 할 수 있습니다 :

from module import * 

IPython은하지 않습니다하지만, 완성을 제한하기 위해 동일한 변수를 사용할 수 있습니다 이 작업을 기본적으로 수행하십시오. 런타임에이를 사용하려면 설정 :

get_ipython().Completer.limit_to__all__ = True 

를 또는 영구적으로 설정하려면 ipython_config.py에 추가 :

c.IPCompleter.limit_to__all__ = True 
+0

인터넷 표준과 같은 오래된 질문에 답해 주셔서 감사합니다! –

+0

기본적으로 IPython이이 작업을 수행하지 않는 이유는 무엇입니까? 그냥 궁금해서 - 좋은 이유가 있고 궁금해서 알고 싶습니다. –

+1

주로'__all__'은 종종 잘 유지되지 않고'_' 접두어로 된 private 멤버 (기본적으로 숨겨져 있습니다)와는 달리 변경된 설정으로 다시 시작하지 않고 누락 된 항목을 묻는 명확한 방법이 없습니다. 패치 [here] (https://github.com/ipython/ipython/pull/1529)와 추가 논의 [here] (https://github.com/ipython/ipython/pull/1497)를 볼 수 있습니다. – minrk

관련 문제