2011-06-11 3 views

답변

4

당신은 모든 모듈은하지만, 파일에서 온 것으로

foo.__file__ 

주에있는 정보를 찾을 수 있습니다 (그리고 Win7에에있어). 일부 모듈은 인터프리터에 직접 컴파일되며 해당 모듈에는 __file__ 특성이 없습니다.

인터프리터에 포함 된 모듈 목록은 sys.builtin_module_names에서 찾을 수 있습니다.

+0

일부는 C에서 컴파일되며 소스 코드를 직접 사용할 수 없습니다. –

+0

감사합니다. Sven. 하지만 파이썬은 내가 가져온 모듈에 __ file __ 애트리뷰트 (기본 __bold__ 비헤이비어를 방지하기 위해 추가 된 스페이스)가 없다고 말했고 인터프리터에서는 컴파일되지 않았다. Python 0.2.2와 Python 소스 코드를 별도로 구분하여 Python 0.2.2를 내 장고 프로젝트 위치에 복사했습니다. – Trindaz

+1

사실, 인터프리터로 컴파일되지 않은 모든 모듈은 C 확장자이거나'.pyc' 파일이나 다른 것으로부터로드 된 것과 관계없이'__file__' 속성을 가져야합니다. 어떤 버전의 파이썬을 사용하고 있습니까? 어쨌든'imp.find_module()'을 사용하여 파이썬이 어떤 파일을 임포트 할지를 알아볼 수도 있습니다. –

0

모듈에 파일 시스템의 파일에 일대일 매핑이없는 경우 __file__ 값에 대해 확실하지 않습니다. 특히 ZIP 파일 내에있는 모듈을로드하는 경우 무엇이 __file__처럼 보이는지 잘 모르겠습니다. (필자가 그러한 매핑을 필요로 할 때 튜플을 ("path/to/file.zip", "path/within/zip/module.pyc") 사용했지만 sys.path를 수동으로 걷는 결과였다.) 방금 __file__None으로 설정하면 놀라지 않을 것입니다.

동일한 이름의 모듈을로드하는 데 문제가있는 경우 항상 sys.path에있는 첫 번째 모듈입니다.

패키지를 처음 가져 오기 전에 수작업을 조정하기 전에 sys.path.insert(0, some_dir)까지 입력 할 수 있습니다. (환경에서, 이것은 PYTHONPATH로 설정되어 있습니다.)

이상적으로, 당신은 PYTHONPATH 및/또는 sys.path을 확인하여 간단하게 사용하는 확인할 수 있습니다. 잘못된 것을로드하는 경우이를 수정하는 유일한 방법은 PYTHONPATH 또는 sys.path입니다.