Jak znaleźć lokalizację źródeł modułów Pythona?
Jak mogę dowiedzieć się, gdzie jest zainstalowany plik źródłowy danego modułu Pythona? Czy metoda jest inna w Windowsie niż w Linuksie?
Staram się szukać źródła modułu datetime
w szczególności, ale interesuje mnie również bardziej ogólna odpowiedź.
16 answers
Dla czystego modułu Pythona można znaleźć źródło, patrząc na themodule.__file__
.
Moduł datetime jest jednak napisany w języku C i dlatego datetime.__file__
wskazuje na plik. so (nie ma {[2] } w systemie Windows), a więc nie widać źródła.
Jeśli pobierasz Pythona i rozpakowujesz go, kod modułów znajduje się w podkatalogu Modules.
Na przykład, jeśli chcesz znaleźć kod datetime dla Pythona 2.6, możesz spojrzeć na
Python-2.6/Modules/datetimemodule.c
Możesz również znaleźć najnowszą wersję Mercurial w Internecie na https://hg.python.org/cpython/file/tip/Modules/_datetimemodule.c
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-09-09 06:12:12
Uruchomienie python -v
z linii poleceń powinno powiedzieć co i skąd jest importowane. To działa dla mnie na Windows i 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
...
Nie jestem pewien, co te złe mtime są na mojej instalacji!
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-11-06 18:40:27
Zdaję sobie sprawę, że ta odpowiedź spóźnia się 4 lata, ale istniejące odpowiedzi wprowadzają ludzi w błąd.
Dobrym sposobem na to jest nigdy __file__
, lub próba przejścia {[1] } i poszukiwania siebie itp. (chyba że musisz być wstecznie kompatybilny poza 2.1).
To inspect
moduł-w szczególności getfile
lub getsourcefile
.
Chyba, że chcesz nauczyć się i wdrożyć zasady (które są udokumentowane, ale bolesne, dla CPython 2.x, a nie udokumentowane w ogóle dla innych wdrożenia, lub 3.x) do mapowania .pyc
do .py
plików;archiwa zip, jajka i pakiety modułów; próbuje różnych sposobów, aby uzyskać ścieżkę do .so
/.pyd
pliki, które nie obsługują __file__
; W takim razie, śmiało.
Tymczasem źródła każdej wersji Pythona z wersji 2.0+ są dostępne online pod adresem http://hg.python.org/cpython/file/X.Y/
(np., 2.7 lub 3.3). Tak więc, gdy odkryjesz, że inspect.getfile(datetime)
jest .so
lub .pyd
plikiem takim jak /usr/local/lib/python2.7/lib-dynload/datetime.so
, możesz sprawdzić to wewnątrz katalogu modułów. Ściśle mówiąc, nie ma sposobu, aby być pewnym, który plik definiuje który moduł, ale prawie wszystkie z nich to foo.c
lub foomodule.c
, więc nie powinno być trudno zgadnąć, że datetimemodule.c jest tym, czego chcesz.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-12-15 00:31:15
Lista sys.path
zawiera listę katalogów, które będą przeszukiwane dla modułów w czasie wykonywania:
python -v
>>> import sys
>>> sys.path
['', '/usr/local/lib/python25.zip', '/usr/local/lib/python2.5', ... ]
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-05-02 15:06:20
Jeśli używasz pip do instalacji modułów, po prostu pip show $module
zwracana jest lokalizacja.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-09-25 14:27:58
datetime
jest wbudowanym modułem, więc nie ma pliku źródłowego (Pythona).
Dla modułów pochodzących z Plików .py
(lub .pyc
), można użyć mymodule.__file__
, np.
> import random
> random.__file__
'C:\\Python25\\lib\\random.pyc'
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-11-06 18:41:56
From the standard library try 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))
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-05-04 02:40:30
W interpreterze Pythona można zaimportować konkretny moduł, a następnie wpisać help (module). To daje szczegóły, takie jak nazwa, plik, moduł Docs, opis et al.
Ex:
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
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-05-17 12:49:20
Nowość w Pythonie 3.2, możesz teraz używać np. code_info()
z modułu dis:
http://docs.python.org/dev/whatsnew/3.2.html#dis
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-02-23 10:56:12
Sprawdź to nifty" cdp " polecenie aby cd do katalogu zawierającego źródło dla wskazanego modułu Pythona:
cdp () {
cd "$(python -c "import os.path as _, ${1}; \
print _.dirname(_.realpath(${1}.__file__[:-1]))"
)"
}
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-07-08 22:25:58
Oto jedna linijka, aby uzyskać nazwę pliku dla modułu, odpowiednią do aliasingu powłoki:
echo 'import sys; t=__import__(sys.argv[1],fromlist=[\".\"]); print(t.__file__)' | python -
Skonfigurowany jako alias:
alias getpmpath="echo 'import sys; t=__import__(sys.argv[1],fromlist=[\".\"]); print(t.__file__)' | python - "
Do użycia:
$ getpmpath twisted
/usr/lib64/python2.6/site-packages/twisted/__init__.pyc
$ getpmpath twisted.web
/usr/lib64/python2.6/site-packages/twisted/web/__init__.pyc
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-10-02 09:19:41
W systemie windows możesz znaleźć lokalizację modułu Pythona, jak pokazano poniżej: tj.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-06-09 10:04:36
Na Ubuntu 12.04, na przykład pakiet numpy dla python2, można znaleźć pod adresem:
/usr/lib/python2.7/dist-packages/numpy
Oczywiście, nie jest to ogólna odpowiedź
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-06-22 14:18:30
Nie wszystkie moduły Pythona są napisane w Pythonie. Datetime jest jednym z nich, który nie jest, a (na Linuksie) jest datetime.so.
Musisz pobrać kod źródłowy do standardowej biblioteki Pythona, aby się do niego dostać.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-11-30 13:43:55
Dla tych, którzy preferują rozwiązanie GUI: jeśli używasz gui takiego jak Spyder (część instalacji Anaconda), możesz po prostu kliknąć prawym przyciskiem myszy nazwę modułu (np. " csv "w" Importuj csv") i wybrać "przejdź do definicji" - otworzy to plik, ale także na górze możesz zobaczyć dokładną lokalizację pliku ("C:....csv.py")
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-12-01 14:00:13
Możesz zobaczyć źródło bezpośrednio z repozytorium git . Na przykład tutaj jest datetime module i jako bonus, subprocess module.
Jeśli poszperasz więcej, możesz znaleźć tradycyjną implementację standardowego interpretera Pythona, który jest napisany w 'C' i nazywany również 'CPython'
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-10-02 13:02:29