가져온 모듈을 나열하는 방법?


152

가져온 모든 모듈을 열거하는 방법은 무엇입니까?

예를 들어이 ['os', 'sys']코드에서 얻고 싶습니다 .

import os
import sys

나는 그것이 네이티브 파이썬에서는 가능하다고 생각하지 않지만, 이전의 질문은 도움이 될 것입니다 : stackoverflow.com/questions/2572582/…
parent5446

6
때때로 (ex : with ipython --pylab) 파이썬 인터프리터가 사전 정의 된 모듈이로드 된 상태로 시작됩니다. 별칭을 알 수있는 방법에 대한 질문 유적, O_O 사용
YOTA

답변:


182
import sys
sys.modules.keys()

현재 모듈에 대한 모든 수입품을 얻는 대략적인 방법은 모듈을 검사하는 것 globals()입니다.

import types
def imports():
    for name, val in globals().items():
        if isinstance(val, types.ModuleType):
            yield val.__name__

로컬 가져 오기 또는와 같은 비 모듈 가져 오기는 반환하지 않습니다 from x import y. 이것을 val.__name__사용하면 원래 모듈 이름을 얻을 수 있도록 리턴합니다 import module as alias. 별명을 원하면 대신 수율 이름.


2
또는 전역과 sys.modules의 교차점을 찾을 수 있으며 유형 테스트를 전혀하지 않습니다.
Marcin

가져온 모듈의 이름을 재정의 할 때 전체 모듈 이름을 반환하는 유일한 솔루션입니다. 예를 들어 import numpy as np, 이렇게하면 numpy다른 두 제안이 반환 np됩니다.
joelostblom

1
어떤 이유로 모듈 이름과 별명이 모두 필요한 경우 name변수 에서 사용할 수 있습니다 . 따라서 문자열을 생성하려면 yield 문이있는 위치 import numpy as np와 같은 것을 'import %s as %s' % (val.__name__, name)하십시오.
André C. Andersen

38

의 교차점 찾기 sys.modules와를 globals:

import sys
modulenames = set(sys.modules) & set(globals())
allmodules = [sys.modules[name] for name in modulenames]

1
어쩌면을 사용하는 frozenset대신 여기에? -여기 내 1- 라이너가 있습니다 :frozenset(imap(lambda name: modules[name], frozenset(modules) & frozenset(globals())))
AT

위의 솔루션은 from명령을 사용하여 가져 오는 모듈을 추출하지 않습니다 . 예를 들어 고려하십시오 from scipy.stats import norm. 이것은 norm모듈을 가져 왔다는 것을 알려주지 않습니다 . 어떻게 이것에 통합 할 수 있습니까?
Ujjwal

@Ujjwal 글쎄, 그 모듈은 수입되지 않고 단지 구성 요소입니다. 모든 것이 필요한 경우 sys.modules를 사용하십시오.
Marcin

28

스크립트 외부에서이를 수행하려면 다음을 수행하십시오.

파이썬 2

from modulefinder import ModuleFinder
finder = ModuleFinder()
finder.run_script("myscript.py")
for name, mod in finder.modules.iteritems():
    print name

파이썬 3

from modulefinder import ModuleFinder
finder = ModuleFinder()
finder.run_script("myscript.py")
for name, mod in finder.modules.items():
    print(name)

myscript.py에 의해로드 된 모든 모듈을 인쇄합니다.


1
파이썬 3의 경우, 변경 .iteritems().items()인쇄 문 및 브라켓
카 다몬

참고 : 네임 스페이스를 처리 할 때 충돌이 발생합니다. bugs.python.org/issue40350
mPrinC

스니핑 된 자체는 내 컴퓨터에 204 개의 의존성을 가지고 있습니다.
Guimoute

12
print [key for key in locals().keys()
       if isinstance(locals()[key], type(sys)) and not key.startswith('__')]

8

수학을 가져온 다음 다시 말해 보자.

>>import math,re

지금 같은 사용법을 볼

>>print(dir())

가져 오기 전과 가져 오기 후에 실행하면 차이를 볼 수 있습니다.


6

실제로 다음과 함께 잘 작동합니다.

import sys
mods = [m.__name__ for m in sys.modules.values() if m]

가져올 수있는 모듈 이름 으로 목록이 생성 됩니다.


그것은 실제로 질문에 대답하지 않습니다.
bergercookie

4

이 코드는 모듈에서 가져온 모듈을 나열합니다.

import sys
before = [str(m) for m in sys.modules]
import my_module
after = [str(m) for m in sys.modules]
print [m for m in after if not m in before]

코드를 실행하기 위해 새 시스템에 어떤 외부 모듈을 설치해야하는지 알고 싶을 때 유용합니다.

sys가져온 모듈을 나열하지 않습니다 .


1

@Lila를 훔치면 (포맷이 없기 때문에 주석을 달 수 없습니다) 모듈의 / path /도 표시됩니다.

#!/usr/bin/env python
import sys
from modulefinder import ModuleFinder
finder = ModuleFinder()
# Pass the name of the python file of interest
finder.run_script(sys.argv[1])
# This is what's different from @Lila's script
finder.report()

어떤 생산 :

Name                      File
----                      ----

...
m token                     /opt/rh/rh-python35/root/usr/lib64/python3.5/token.py
m tokenize                  /opt/rh/rh-python35/root/usr/lib64/python3.5/tokenize.py
m traceback                 /opt/rh/rh-python35/root/usr/lib64/python3.5/traceback.py
...

.. grepping 또는 무엇을 위해 적합합니다. 경고, 길다!


0

이 경우 목록 이해력을 사용하는 것이 좋습니다.

>>> [w for w in dir() if w == 'datetime' or w == 'sqlite3']
['datetime', 'sqlite3']

# To count modules of interest...
>>> count = [w for w in dir() if w == 'datetime' or w == 'sqlite3']
>>> len(count)
2

# To count all installed modules...
>>> count = dir()
>>> len(count)
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.