2012-01-11 5 views
2

imp 모듈을 파이썬 3에서 모듈과 패키지를로드하는 데 사용할 수 있다는 것을 알고 있습니다.모듈 정보를로드하지 않고 가져 오는 방법은 무엇입니까?

그러나 실제로로드하기 전에 모듈 (예 : __version__)에 대한 정보를 얻고 싶습니다.

어떻게 정보를 얻을 수 있습니까? imp에 유용한 방법을 찾지 못했습니다.

바로 지금은 imp.find_module에있는 파일을 구문 분석하는 것보다 더 잘 볼 수 없습니다.

+0

모듈 가져 오기, 버전 확인, 잘못된 모듈 인 경우 'sys.modules'에서 다시 삭제하는 방법은 무엇입니까? 이것이 어떤 이유로 옵션이 아니라면,'ast' 모듈로 파일을 파싱하는 것이 확실히 자신을 파싱하는 것보다 낫습니다. –

+0

왜 이것을 원하니? 이유는 대답을 변경합니다. –

+0

저는 플러그인 관리자를 만들고 있는데, 현재로드 된/사용 가능한 애드온 (예 : 최신 브라우저)을 표시하는 AddonManager가 있습니다. 모든 애드온은'__version__'과'__desc__'을 구현해야하며 "사용 가능하지만로드되지 않은 애드온"에 대해이 값을 표시하려고합니다. – rds

답변

1

이것은 모듈이 무엇인지, 모듈이 설치되었는지 여부 등에 따라 달라집니다. 예를 들어 __version__을 원하지만 모듈에 존재하는 것이 보장되지는 않습니다. __cached__, __doc__, __file__, __name__, __package__과 같이 모듈에있는 표준 속성은 모두 가져올 때 만들어집니다.

모듈이 아직 설치되지 않은 경우 (예 : 다운로드 한 tgz 또는 기타), 아마도 setup.py 파일을 가지고있을 것이므로 distutils으로 압축을 풀면 해당 배포본에서 많은 정보를 얻을 수 있습니다. 예를 들어 pyroma에서이 작업을 수행합니다.

설치되어있는 경우 EGG-INFO 디렉토리가있을 수 있습니다. 거기에는 많은 정보가 담긴 파일들이 있습니다. 대부분은 PKG-INFO 파일에 있습니다. 이 경우 각 모듈은 Distribute (또는 Setuptools)을 사용해야합니다.

EGG-INFO/PKG-INFO 파일이없는 경우 파일을 구문 분석해야합니다. __version__의 경우 정규 표현식 일치를 수행 할 수 있습니다. 그다지 일반적이지는 않겠지 만, 당신이 찾는 정보가 무엇이든간에 일반이 될 수는 없으며, 당신이보고있는 모듈을 정확히 안다면 대부분 존재하지 않을 것입니다.

다른 용도로는 파서가 필요할 수 있습니다. 비록 lib2to3의 파서가 좋은 면도 가지고 있지만 ast이 아마 거기에서 가장 좋은 옵션 일 것입니다.

+0

달걀 정보가 좋은 생각 인 것 같습니다. 후보자 모듈을 어떻게 나열 할 수 있습니까? 나의 초기 아이디어는 내 응용 프로그램의 하위 디렉토리에 모듈을 배포하는 것이 었습니다.이 경우 간단한 'dir.list()'가 목록을 생성합니다. – rds

+0

@rds : 그건 분명히 좋은 방법입니다. –

4

수 없습니다. __version__은 실행되는 동안 모듈이 만드는 객체의 이름입니다. 모듈 정의를 담당하는 파일을 실행할 때까지는 존재하지 않습니다. 구문 분석은 하나의 옵션이지만 __version__을 정의하는 코드가 사소한 경우에만 작동합니다.

__version__ = 'some literal' 

더 많은 내용이 포함되어 있다면 적어도 부분적으로 코드를 실행해야합니다.

관련 문제