파이썬 모듈 소스의 위치는 어떻게 찾습니까?
주어진 파이썬 모듈의 소스 파일이 어디에 설치되어 있는지 어떻게 알 수 있습니까? Windows에서 Linux와 다른 방법이 있습니까?
datetime
특히 모듈 의 소스를 찾으려고 노력하고 있지만 더 일반적인 답변에 관심이 있습니다.
순수한 파이썬 모듈의 경우을 보면 소스를 찾을 수 있습니다 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 버전을 찾을 수도 있습니다.
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이 내 설치에 무엇인지 확실하지 않습니다!
이 답변이 4 년 늦었다는 것을 알고 있지만 기존 답변은 사람들을 오도합니다.
이 작업을 수행하는 올바른 방법은 결코 __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.so
foo.c
foomodule.c
이 sys.path
목록에는 런타임시 모듈을 검색 할 디렉토리 목록이 포함됩니다.
python -v
>>> import sys
>>> sys.path
['', '/usr/local/lib/python25.zip', '/usr/local/lib/python2.5', ... ]
pip를 사용하여 모듈을 설치 pip show $module
하는 경우 위치 만 반환됩니다.
표준 라이브러리에서 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))
datetime
내장 모듈이므로 (Python) 소스 파일이 없습니다.
.py
(또는 .pyc
) 파일 에서 오는 모듈의 경우 다음을 사용할 수 있습니다 mymodule.__file__
.
> import random
> random.__file__
'C:\\Python25\\lib\\random.pyc'
파이썬 인터프리터에서 특정 모듈을 가져온 다음 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
Python 3.2의 새로운 기능은 이제 code_info()
dis 모듈에서 사용할 수 있습니다 . http://docs.python.org/dev/whatsnew/3.2.html#dis
쉘 별명 지정에 적합한 모듈의 파일 이름을 얻는 하나의 라이너가 있습니다.
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
이 멋진 "cdp"명령 을 확인 하여 표시된 Python 모듈의 소스가 포함 된 디렉토리로 cd하십시오.
cdp () {
cd "$(python -c "import os.path as _, ${1}; \
print _.dirname(_.realpath(${1}.__file__[:-1]))"
)"
}
Windows에서는 아래와 같이 파이썬 모듈의 위치를 찾을 수 있습니다. 즉, rest_framework 모듈 찾기
Ubuntu 12.04에서 python2 용 numpy 패키지는 다음 위치에서 찾을 수 있습니다.
/usr/lib/python2.7/dist-packages/numpy
물론 이것은 일반적인 대답이 아닙니다.
모든 파이썬 모듈이 파이썬으로 작성된 것은 아닙니다. Datetime은 그렇지 않은 것 중 하나이며 (Linux에서는) datetime.so입니다.
소스 코드를 파이썬 표준 라이브러리에 다운로드하여 얻을 수 있습니다.
GUI 솔루션을 선호하는 사용자 : Spyder (Anaconda 설치의 일부)와 같은 GUI를 사용하는 경우 모듈 이름 (예 : "import csv"의 "csv")을 마우스 오른쪽 단추로 클릭하고 "go to definition "-파일을 열지 만 맨 위에 정확한 파일 위치 ("C : .... csv.py ")가 표시됩니다
참고 URL : https://stackoverflow.com/questions/269795/how-do-i-find-the-location-of-python-module-sources
'Programing' 카테고리의 다른 글
자동 증분 버전 번호를 얻는 방법 (Visual Studio)? (0) | 2020.02.17 |
---|---|
컨텐츠 스크립트를 사용하여 페이지 컨텍스트에 코드 삽입 (0) | 2020.02.17 |
Enum 값의 속성 얻기 (0) | 2020.02.17 |
PHP + curl, HTTP POST 샘플 코드? (0) | 2020.02.17 |
UTF-8, UTF-16 및 UTF-32 (0) | 2020.02.16 |