파이썬 모듈 소스의 위치는 어떻게 찾습니까?


479

주어진 파이썬 모듈의 소스 파일이 어디에 설치되어 있는지 어떻게 알 수 있습니까? Windows에서 Linux와 다른 방법이 있습니까?

datetime특히 모듈 의 소스를 찾으려고 노력하고 있지만 더 일반적인 답변에 관심이 있습니다.

답변:


375

순수한 파이썬 모듈의 경우을 보면 소스를 찾을 수 있습니다 themodule.__file__. 그러나 datetime 모듈은 C로 작성되므로 datetime.__file__.so 파일 ( datetime.__file__Windows 에는 없음) 을 가리 키 므로 소스를 볼 수 없습니다.

파이썬 소스 타르볼을 다운로드하여 추출하면 모듈 서브 디렉토리 에서 모듈 코드를 찾을 수 있습니다 .

예를 들어 python 2.6의 날짜 / 시간 코드를 찾으려면

Python-2.6/Modules/datetimemodule.c

https://hg.python.org/cpython/file/tip/Modules/_datetimemodule.c 웹에서 최신 Mercurial 버전을 찾을 수도 있습니다.


Linux 및 Mac OS X에서 datetime .__ file__이 .so를 가리 키도록 응답을 편집하면 (Windows에서는 datetime 모듈 객체에 파일 속성 이 없지만 ) 응답을 수락합니다.
Daryl Spitzer

실제로 Windows에서 (적어도 사용중인 버전에서는) datetime에는 파일 속성 이 없습니다 .
Daryl Spitzer

221

python -v명령 행에서 실행 하면 가져 오는 대상과 위치를 알려줍니다. 이것은 Windows 및 Mac OS X에서 작동합니다.

C:\>python -v
# installing zipimport hook
import zipimport # builtin
# installed zipimport hook
# C:\Python24\lib\site.pyc has bad mtime
import site # from C:\Python24\lib\site.py
# wrote C:\Python24\lib\site.pyc
# C:\Python24\lib\os.pyc has bad mtime
import os # from C:\Python24\lib\os.py
# wrote C:\Python24\lib\os.pyc
import nt # builtin
# C:\Python24\lib\ntpath.pyc has bad mtime
...

그 나쁜 mtime이 내 설치에 무엇인지 잘 모르겠습니다!


8
멋있는! 대화식 모드로 열린 후 고유 한 import 문을 입력하여 특정 lib의 출처를 확인할 수도 있습니다.
scorpiodawg

3
built-in모듈 은 어디에 있습니까 ?
loretoparisi

120

이 답변이 4 년 늦었다는 것을 알고 있지만 기존 답변은 사람들을 오도합니다.

이 작업을 수행하는 올바른 방법은 never __file__또는 sys.path직접 검색하거나 검색 하려고하는 등입니다 (2.1 이후 버전과 호환되지 않는 경우 제외).

그것은이다 inspect특히 모듈, getfile또는 getsourcefile.

파일 에 맵핑 .pyc하기 위한 규칙 (CPython 2.x에 대해 문서화되었지만 고통 스럽지만 다른 구현에 대해서는 전혀 문서화되지 않았거나 3.x)을 배우고 구현하지 않는 한 .py; .zip 아카이브, 에그 및 모듈 패키지 처리 의 경로를 얻을 수있는 다른 방법으로 시도 .so/ .pyd지원하지 않는 파일을 __file__; Jython / IronPython / PyPy의 기능 파악 그런 경우에는 가십시오.

한편 2.0+의 모든 Python 버전 소스는 온라인 http://hg.python.org/cpython/file/X.Y/(예 : 2.7 또는 3.3 )으로 제공됩니다. 따라서이 파일 또는 파일 inspect.getfile(datetime)이 발견 되면 Modules 디렉토리에서 찾을 수 있습니다. 엄밀히 말하면 어떤 파일이 어떤 모듈을 정의하는지 확신 할 수있는 방법은 없지만 거의 모든 모듈이 또는입니다 . 그래서 datetimemodule.c 가 원하는 것인지 추측하기 어렵지 않습니다 ..so.pyd/usr/local/lib/python2.7/lib-dynload/datetime.sofoo.cfoomodule.c


3
__file__내장 이 아닌 사람에게 적용되지 않습니까? 크롤링 sys.path가 고통 스러울 수있는 부분을 이해하지만 (특히 meta_path에 대해 알지 못하면) __file__정의와 바이너리 사이의 네임 스페이스에 대한 우려가 있습니까?

1
날짜 시간에 2.7.8 에서이 작업을 수행하고 getfile 및 getsourcefile 모두에 대해 TypeError를 얻습니다. 개인적으로 여러 버전의 파이썬이 설치되어 있으며 datetimemodule.c의 WHICH 버전을 알아야합니다. 지금은 인터프리터 버전이 실행 중일 때 지적 해야하는 것을 알지 못하기 때문에 ...
mmitchell

1
@ mmitchell : inspect.getfile (datetime)에서 TypeError가 발생하면 datetime이 실제로 모듈이며 동일한 이름에 할당 된 것이 아니라고 가정하면 사용자 지정 빌드를 만들었을 것입니다. 로드 가능한 모듈로 만드는 대신 날짜 시간에 인터프리터에 정적으로 연결됩니다. 그러나 내가 생각하지 못한 다른 이유가있을 수 있습니다. 새로운 질문을하고이를 재현하기 위해 더 많은 정보를 제공해야합니다.
abarnert

@mmitchell : 한편, datetimemodule.c를 가리키는 것이 아니기 때문에 datetimemodule.c의 어떤 버전을 가리키는 지 알 수있는 방법이 없습니다. C 파일이 시스템에 없거나 컴파일 한 후에 편집되었을 수 있습니다.
abarnert

@ tristan : 나는 당신이 무엇을 요구하는지 이해하지 못하지만, 아마도 이것이 대답 할 것입니다 : __file__작동 할 때마다 inspect.getfile; __file__inspect 모듈을 사용하는 것보다 사용 여부를 추측하는 것이 더 좋은 상황은 없습니다 .
abarnert

67

sys.path목록에는 런타임시 모듈을 검색 할 디렉토리 목록이 포함됩니다.

python -v
>>> import sys
>>> sys.path
['', '/usr/local/lib/python25.zip', '/usr/local/lib/python2.5', ... ]

10
python -c 'import sys; print "\n".join(sys.path)'대화 형 파이썬에 빠지지 않고도 볼 수 있습니다.
Joe Block

6
Python 3 :python -c 'import sys; print("\n".join(sys.path))'
arudzinska

61

pip를 사용하여 모듈을 설치 pip show $module하는 경우 위치 만 반환됩니다.


10
(나는 $module문자 그대로 입력하지 않고 자리 표시 자 변수를 의미 한다고 생각 합니다. 예를 들어 m=numpy; pip show $m... 등 m)
michael

이것은 질문에 대한 가장 정확한 답변으로 표시되어야합니다.
Rahul Goyal

37

표준 라이브러리에서 imp.find_module을 시도 하십시오.

>>> import imp
>>> imp.find_module('fontTools')
(None, 'C:\\Python27\\lib\\site-packages\\FontTools\\fontTools', ('', '', 5))
>>> imp.find_module('datetime')
(None, 'datetime', ('', '', 6))

1
이건 끝내줘. I apt-get remove'D DataDog는 여전히 가져올 수 있습니다. 이것은 다른 솔루션이 도움이되지 않을 때 파일 위치를 찾는 데 도움이되었습니다.
sg

python3.x의 경우, imp패키지는 (3.4 이후부터) 더 이상 사용되지 않습니다 (버전 importlib3.1 이후) docs.python.org/3.6/library/imp.html
michael

이제 python3 에이 방법으로 사용해야합니다. import importlib다음importlib.util.find_spec('fontTools')
Medhat

33

datetime 내장 모듈이므로 (Python) 소스 파일이 없습니다.

.py(또는 .pyc) 파일 에서 오는 모듈의 경우 다음을 사용할 수 있습니다 mymodule.__file__.

> import random
> random.__file__
'C:\\Python25\\lib\\random.pyc'

12

파이썬 인터프리터에서 특정 모듈을 가져온 다음 help (module)를 입력 할 수 있습니다. 이름, 파일, 모듈 문서, 설명 등의 세부 정보가 제공됩니다.

전의:

import os

help(os)


Help on module os:

NAME

os - OS routines for Mac, NT, or Posix depending on what system we're on.

FILE

/usr/lib/python2.6/os.py

MODULE DOCS

http://docs.python.org/library/os

DESCRIPTION

This exports:

- all functions from posix, nt, os2, or ce, e.g. unlink, stat, etc.

- os.path is one of the modules posixpath, or ntpath

- os.name is 'posix', 'nt', 'os2', 'ce' or 'riscos'

et al


이것은 나에게 모듈 파일의 전체 경로를 제공했지만 다른 답변은 상대 경로 만 제공했습니다. 감사.
Jerther

12

쉘 별명 지정에 적합한 모듈의 파일 이름을 얻는 하나의 라이너가 있습니다.

echo 'import sys; t=__import__(sys.argv[1],fromlist=[\".\"]); print(t.__file__)'  | python - 

별명으로 설정하십시오.

alias getpmpath="echo 'import sys; t=__import__(sys.argv[1],fromlist=[\".\"]); print(t.__file__)'  | python - "

쓰다:

$ getpmpath twisted
/usr/lib64/python2.6/site-packages/twisted/__init__.pyc
$ getpmpath twisted.web
/usr/lib64/python2.6/site-packages/twisted/web/__init__.pyc


9

멋진 "cdp"명령 을 확인 하여 표시된 Python 모듈의 소스가 들어있는 디렉토리로 cd하십시오.

cdp () {
  cd "$(python -c "import os.path as _, ${1}; \
    print _.dirname(_.realpath(${1}.__file__[:-1]))"
  )"
}

감사! 내가 찾던 것입니다. 이상하게도 그들은 파이썬 배포판에 그런 종류의 것을 포함시키지 않을 것입니다.
Antony Hatchkins

9

Windows에서는 아래와 같이 파이썬 모듈의 위치를 ​​찾을 수 있습니다. 즉, rest_framework 모듈 찾기 여기에 이미지 설명을 입력하십시오


4

Ubuntu 12.04에서 python2 용 numpy 패키지는 다음 위치에서 찾을 수 있습니다.

/usr/lib/python2.7/dist-packages/numpy

물론 이것은 일반적인 대답이 아닙니다.


0

모든 파이썬 모듈이 파이썬으로 작성된 것은 아닙니다. Datetime은 그렇지 않은 것 중 하나이며 Linux에서는 datetime.so입니다.

소스 코드를 파이썬 표준 라이브러리에 다운로드하여 얻을 수 있습니다.


2
대릴 : "날짜는 파이썬으로 작성되지 않은 파이썬 모듈 중 하나입니다"라고 짐의 대답을 잘못 해석했습니다.
Matthew Trevor

0

GUI 솔루션을 선호하는 사용자 : Spyder (Anaconda 설치의 일부)와 같은 GUI를 사용하는 경우 모듈 이름 (예 : "import csv"의 "csv")을 마우스 오른쪽 단추로 클릭하고 "go to definition "-파일을 열지 만 맨 위에 정확한 파일 위치 ("C : .... csv.py ")가 표시됩니다


0

인터프리터를 사용하지 않는 경우 아래 코드를 실행할 수 있습니다.

import site
print (site.getsitepackages())

산출:

['C:\\Users\\<your username>\\AppData\\Local\\Programs\\Python\\Python37', 'C:\\Users\\<your username>\\AppData\\Local\\Programs\\Python\\Python37\\lib\\site-packages']

Array의 두 번째 요소는 패키지 위치입니다. 이 경우 :

C:\Users\<your username>\AppData\Local\Programs\Python\Python37\lib\site-packages

0

터미널에서 여러 파이썬 버전이 설치되어 있는지 확인하는 또 다른 방법입니다.

-MBP : ~ python3 -m pip show pyperclip

위치 : /Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-

MBP : ~ python -m pip show pyperclip

위치 : /Users/umeshvuyyuru/Library/Python/2.7/lib/python/site-packages


-1

Spyder와 같은 IDE에서 모듈을 가져온 다음 모듈을 개별적으로 실행하십시오. 여기에 이미지 설명을 입력하십시오


가져 오기 및 인쇄 str()모델은 스크린 샷에서 무엇을하고 있는지에 대한보다 정확한 설명입니다 플러스 IDE는이 솔루션에 대한 관련성이없는 것 같다
mousetail

2
StackOverflow에 오신 것을 환영합니다! 이미지를 사용하여 코드를 게시하지 마십시오. 이미지를 읽기 어렵고 검색 할 수 없으며 일부 독자가 볼 수 없습니다. 대신 답변 본문에 관련 코드를 직접 입력하십시오.
브라이언
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.