Dla czystego modułu pythonowego możesz znaleźć źródło, patrząc na themodule.__file__
. Moduł datetime jest jednak napisany w C i dlatego datetime.__file__
wskazuje na plik .so (nie ma go datetime.__file__
w systemie Windows), dlatego nie można zobaczyć źródła.
Jeśli pobierzesz archiwum źródłowe Pythona i rozpakujesz go, kod modułów można znaleźć 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
Najnowszą wersję Mercurial można również znaleźć w Internecie pod
adresem https://hg.python.org/cpython/file/tip/Modules/_datetimemodule.c
Uruchomienie
python -v
z wiersza poleceń powinno powiedzieć, co jest importowane i skąd. Działa to dla mnie w systemach Windows i Mac OS X.Nie jestem pewien, jakie te złe mtime są w mojej instalacji!
źródło
built-in
moduły?Zdaję sobie sprawę, że odpowiedź jest spóźniona o 4 lata, ale istniejące odpowiedzi wprowadzają w błąd ludzi.
Właściwym sposobem na to jest nigdy
__file__
lub próba przejściasys.path
i szukania siebie itp. (Chyba że musisz być kompatybilny wstecz niż 2.1).To
inspect
w szczególności modułgetfile
lubgetsourcefile
.Chyba, że chcesz nauczyć się i wdrażać reguły (które są udokumentowane, ale bolesne dla CPython 2.x, i wcale nie udokumentowane dla innych implementacji lub 3.x) dotyczące mapowania
.pyc
do.py
plików; radzenie sobie z archiwami .zip, jajami i pakietami modułów; wypróbowanie różnych sposobów uzyskania ścieżki do.so
/.pyd
plików, które nie obsługują__file__
; zastanawianie się, co robią Jython / IronPython / PyPy; itp. W takim przypadku idź.Tymczasem źródło każdej wersji Pythona od 2.0+ jest dostępne online pod adresem
http://hg.python.org/cpython/file/X.Y/
(np. 2.7 lub 3.3 ). Kiedy więc odkryjesz, żeinspect.getfile(datetime)
jest to plik.so
lub , możesz sprawdzić go w katalogu Modules. Ściśle mówiąc, nie ma sposobu, aby mieć pewność, który określa, jakie moduł, ale prawie wszystkie z nich są albo plik albo , więc nie powinno być trudno się domyślić, że datetimemodule.c to, co chcesz..pyd
/usr/local/lib/python2.7/lib-dynload/datetime.so
foo.c
foomodule.c
źródło
__file__
nie ma zastosowania do niewbudowanych? Rozumiem, gdzie przeszukiwanie sys.path może być bolesne (zwłaszcza bez wiedzy o meta_path), ale czy martwisz się o przestrzeń nazw między__file__
definicjami a plikami binarnymi?__file__
działa,inspect.getfile
działa; nie ma sytuacji, w której zgadywanie, czy użyć,__file__
będzie lepsze niż użycie modułu inspekcji.sys.path
Lista zawiera listę katalogów, które będą wyszukiwane modułów w czasie pracy:źródło
python -c 'import sys; print "\n".join(sys.path)'
pozwoli ci to zobaczyć bez konieczności wchodzenia w interaktywny python.python -c 'import sys; print("\n".join(sys.path))'
Jeśli używasz pip do instalacji modułów,
pip show $module
zwracana jest tylko lokalizacja.źródło
$module
miała to być zmienna zastępcza, a nie dosłownie to, co byśmy wpisali. Np.m=numpy; pip show $m
... itd. Dla każdegom
)ze standardowej biblioteki wypróbuj imp.find_module
źródło
apt-get remove
DataDog i nadal mogłem go zaimportować. Pomogło mi to znaleźć pliki (więc mogłem je usunąć), gdy inne rozwiązania nie pomogły.imp
pakiet jest przestarzały (od wersji 3.4) na korzyśćimportlib
(od wersji 3.1) docs.python.org/3.6/library/imp.htmlimport importlib
potemimportlib.util.find_spec('fontTools')
datetime
jest wbudowanym modułem, więc nie ma pliku źródłowego (Python).W przypadku modułów pochodzących z
.py
(lub.pyc
) plików możesz użyćmymodule.__file__
npźródło
W interpreterie Pythona można zaimportować konkretny moduł, a następnie wpisać help (module). Daje to takie szczegóły, jak nazwa, plik, dokumenty modułu, opis i in.
Dawny:
i in
źródło
Oto jeden linijka do pobrania nazwy pliku modułu, odpowiedni do aliasingu powłoki:
Ustaw jako alias:
Używać:
źródło
Nowość w Python 3.2, możesz teraz używać np.
code_info()
Z modułu dis: http://docs.python.org/dev/whatsnew/3.2.html#disźródło
Sprawdź tę fajną komendę „cdp”, aby cd do katalogu zawierającego źródło wskazanego modułu Python:
źródło
W systemie Windows można znaleźć lokalizację modułu python, jak pokazano poniżej: tzn. Znajdź moduł rest_framework
źródło
Na Ubuntu 12.04, na przykład pakiet numpy dla python2, można znaleźć pod adresem:
Oczywiście nie jest to ogólna odpowiedź
źródło
Nie wszystkie moduły Pythona są napisane w języku Python. Zdarza się, że Datetime jest jednym z nich, a nie (i na Linuksie) to datetime.so.
Musisz pobrać kod źródłowy do standardowej biblioteki Pythona, aby się do niego dostać.
źródło
Dla tych, którzy wolą rozwiązanie GUI: jeśli używasz GUI, takiego jak Spyder (część instalacji Anaconda), wystarczy kliknąć prawym przyciskiem myszy nazwę modułu (np. „Csv” w „import csv”) i wybrać „przejdź do definicji ”- spowoduje to otwarcie pliku, ale także u góry możesz zobaczyć dokładną lokalizację pliku („ C: .... csv.py ”)
źródło
Jeśli nie używasz interpretera, możesz uruchomić poniższy kod:
Wynik:
Drugim elementem w tablicy będzie lokalizacja paczki. W tym przypadku:
źródło
Innym sposobem sprawdzenia, czy masz zainstalowanych wiele wersji Pythona, z terminala.
-MBP: ~ python3 -m pip pokaż pyperclip
Lokalizacja: /Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-
MBP: ~ python -m pip show pyperclip
Lokalizacja: /Users/umeshvuyyuru/Library/Python/2.7/lib/python/site-packages
źródło
W środowisku IDE, takim jak Spyder, zaimportuj moduł, a następnie uruchom moduł indywidualnie. wprowadź opis zdjęcia tutaj
źródło
str()
modelu to dokładniejszy opis tego, co robisz na zrzucie ekranu, a IDE wydaje się nieistotne dla tego rozwiązania