파이썬에서 일종의 가져 오기 종속성 추적에 액세스하려고합니다.파이썬 모듈에서 가져온 모듈 목록을 얻는 방법
모듈로 가져온 모든 모듈의 버전을 설명하는 __dependencies__
dict을 내 모듈에 추가하기로 결정했습니다.
내 모듈에서 가져온 모듈 목록을 자동으로 가져오고 싶습니다. 바람직하게는 모듈의 마지막 줄에 있습니다.
ModuleFinder
(How to list imports within a Python module?으로 제안)은 이미로드 된 모듈에 대한 검사가 수행되어야하므로 작동하지 않습니다.
ModuleFinder
또 다른 문제는 파이썬 스크립트 (지점 if __name__ == '__main__'
포함)이 아닌 모듈을 검사한다는 것입니다.
우리가 장난감 스크립트 script.py 고려하는 경우 :
if __name__ == '__main__':
import foo
를 한 후 결과는 다음과 같습니다
스크립트 모듈로 가져온 경우 거짓이어야한다>>> mf = ModuleFinder
>>> mf.run_script('script.py')
>>> 'foo' in mf.modules
True
.
내 모듈에서 가져온 모듈 만 가져올 수 있습니다. sys.modules
(What is the best way of listing all imported modules in python?에 의해 제안 됨)이 너무 많이 반환됩니다.
sys.modules
의 스냅 샷과 모듈 코드의 시작과 끝을 비교할 수 있습니다. 하지만 그 방법은 내 모듈에서 사용하는 모든 모듈을 놓치고 다른 모듈에서는 이전에 가져온 것입니다.
모듈을 가져 오는 모듈도 나열해야합니다.
우리가 장난감 모듈 example.py을 고려하는 경우 :
이>>> import example
>>> moduleImports(example)
{'foo': <module 'foo' from ... >,
'baz': <module 'baz' from ...>}
(그것은 또한 수입있는 모듈의 재귀 또는 foo.bar
주어진 표시 줄을 포함 할 수있는 모듈입니다 : 같은
from foo import bar
import baz
이 결과는해야한다).
from foo import bar
import bar
가 어떻게 그것을 방지 할 수 있습니다 (
How to list imported modules?에 따라)
globls()
의
사용과 같이 수동으로 비 모듈 가져 오기를 다루는 저를 필요로?
지금까지 내 솔루션에 또 다른 문제가 있습니다. PyCharm은 리팩토링에 대한 수동 가져 오기 작업을 정리하는 경향이있어이를 유지하기가 어렵습니다.
'ModuleFinder'가 작동하지 않는 이유는 분명하지 않습니다. 사실, 반드시 작동 할 수있는 유일한 것이어야합니다. 이미로드 된 모듈과 모듈에서 처음으로 가져온 모듈을 어떻게 구분할 것입니까? 또한 모듈에없는 가져 오기 (예 : 내부 함수)를 전역 범위로 식별하는 방법은 무엇입니까? – ekhumoro
@ekhumoro 왜 귀하의 의견에 대해 알려 드리지 못했습니다. 수정 된 질문을 확인한 다음 알려 주시면 [편집] 태그를 삭제할 수 있습니다. – abukaj
'ModuleFinder'가 모듈에서 작동하지 않는다는 주장은 분명히 거짓입니다 - [python docs의 예제] (https://docs.python.org/2/library/modulefinder.html#example-usage-of- 모듈 파인더). 나는 왜 당신이 그것을 사용하면 안되는 다른 좋은 이유를 보지 않는다. – ekhumoro