2016-06-10 6 views
2

나는 주위를 둘러 보았고이를위한 해결책을 보지 못했다. 내가하고 싶은 것은 런타임에 파이썬에서 사용할 수있는 모든 패키지 목록을 얻는 것입니다. 파이썬 스크립트에서 파이썬이 사용할 수있는 모든 패키지/모듈을 나열하려면 어떻게합니까?

나는이 바라 보았다 :

그러나 그들은 내가 무엇을 찾고되지 않습니다.

그러나
import pkgutil 
for pkg in pkgutil.walk_packages(): 
    print pkg #or do something with them... 

, 내가 할 때 this가 :

import sys 
sys.modules.keys()​​​ 

내가 뭘 원하는 하지 모든 패키지를로드 한 것으로 보인다

나는이 일을 시도 , 내가 원할 때, 모든 파이썬 설치에 사용할 수있는 모든 패키지 + 모듈의 문자열리스트를 원한다.

+0

을 모든 종류의 후크가 있으며 파일이 모듈 또는 다른 방법으로 일치한다는 보장이 없습니다 (즉석에서 모듈을 다운로드하거나 zip 파일에서 모듈을 추출하는 것이 가능함). 그것은 walk_packages가 무엇을 의미하는지조차도 알 수 있습니다. "이 함수는 서브 모듈"*을 찾으려면'__path__' 속성에 액세스하기 위해 주어진 경로에서 모든 패키지 (모든 모듈이 아닌!)를 가져와야합니다. – spectras

+0

(또는 더 간결하게 말하면 패키지가 완전히로드 될 때까지 어떤 서브 모듈이 패키지에 들어 있는지 알 수 없습니다.) – spectras

+0

나는 당신의 요구가 가능하다고 생각하지 않습니다. 예를 들어, 제 3 자 패키지'six six '를 설치했다면'six.moves. *'모듈을 가져 오지 않고 존재했음을 어떻게 알 수 있습니까? – ppperry

답변

2

좋아, 내가 궁금해서, 나는 pkgutil에 조금 팠, 나는 내가 기대했던 것보다 훨씬 간단 인이 함께했다 : 그것은 패키지/모듈을 사용할 수있는 모든 최상위을 나열

list(pkgutil.iter_modules()) 

일반 파일 또는 zip 패키지로로드하지 않고로드 할 수 있습니다. pkgutil 내부에 제대로 등록하지 않으면 다른 유형의 패키지가 표시되지 않습니다.

각 반환 항목

이있는 3 튜플 : 모듈
  • 모듈의 이름을 발견

    • 파일 찾기 인스턴스
    • 그것은 일반 모듈 또는인지 여부를 지정하는 부울 꾸러미. 반환 된 목록의

    예 항목 :

    (FileFinder('/usr/lib/python3/dist-packages'), 'PIL', True), 
    

    그리고 나는 이것이 PIL 패키지로드되지 않았 음을 확인할 수 있습니다 트리거 할 수 있습니다 오기로, 나는 그것이 가져 오지 않고 가능성이 의심

    In [11]: sys.modules['PIL'] 
    --------------------------------------------------------------------------- 
    KeyError         Traceback (most recent call last) 
    <ipython-input-11-b0fc0af6cc34> in <module>() 
    ----> 1 sys.modules['PIL'] 
    
    KeyError: 'PIL' 
    
  • +0

    감사! 나는 그것을 시도 했어야했다. 나는'walk_packages()'가'iter_modules()'와 같은 것을 모두 가져 왔기 때문에 이것을 가정했다 :-) –

    +0

    좋은 발견, 스펙터클! 단지 패키지 이름을 나열하고 싶다면 튜플을'[1]'인덱스로 참조하십시오. – Jeremy

    +1

    @busfault> 똑같은 생각이 들었지만'pkgutil' 내부를 읽으면 하위 모듈을 검사하기 위해로드 만하면된다는 것을 알았습니다. (N + 1 레벨 하위 모듈을 나열하기 전에 N 번째 모듈에'__path__ '가 있는지 확인해야합니다). 그래서로드 된 것과로드되지 않은 것을 확인하면서 시도해 보았습니다 ... 여기 있습니다! – spectras

    관련 문제