Bagaimana saya belajar di mana file sumber untuk modul Python tertentu diinstal? Apakah metode ini berbeda di Windows daripada di Linux?
Saya mencoba mencari sumber datetime
modul khususnya, tetapi saya tertarik pada jawaban yang lebih umum juga.
Untuk modul python murni, Anda dapat menemukan sumbernya dengan melihatnya themodule.__file__
. Modul datetime, bagaimanapun, ditulis dalam C, dan karena itu datetime.__file__
menunjuk ke file .so (tidak ada datetime.__file__
pada Windows), dan karena itu, Anda tidak dapat melihat sumbernya.
Jika Anda mengunduh tarball sumber python dan mengekstraknya, kode modul dapat ditemukan di subdirektori Modul .
Misalnya, jika Anda ingin menemukan kode datetime untuk python 2.6, Anda bisa melihatnya
Python-2.6/Modules/datetimemodule.c
Anda juga dapat menemukan versi Mercurial terbaru di web di https://hg.python.org/cpython/file/tip/Modules/_datetimemodule.c
Menjalankan
python -v
dari baris perintah akan memberi tahu Anda apa yang sedang diimpor dan dari mana. Ini berfungsi untuk saya di Windows dan Mac OS X.Saya tidak yakin apa itu mtime buruk pada instalasi saya!
sumber
built-in
modul?Saya menyadari jawaban ini terlambat 4 tahun, tetapi jawaban yang ada menyesatkan orang.
Cara yang tepat untuk melakukan ini adalah tidak pernah
__file__
, atau mencoba untuk berjalansys.path
dan mencari sendiri, dll. (Kecuali jika Anda harus kompatibel ke belakang melampaui 2.1).Ini
inspect
modul — khususnya,getfile
ataugetsourcefile
.Kecuali Anda ingin belajar dan menerapkan aturan-aturan (yang didokumentasikan, tetapi menyakitkan, untuk CPython 2.x, dan tidak didokumentasikan sama sekali untuk implementasi lain, atau 3.x) untuk pemetaan
.pyc
ke.py
file; berurusan dengan arsip .zip, telur, dan paket modul; mencoba berbagai cara untuk mendapatkan jalur ke.so
/.pyd
file yang tidak mendukung__file__
; mencari tahu apa yang dilakukan Jython / IronPython / PyPy; dll. Dalam hal ini, lakukanlah.Sementara itu, setiap sumber versi Python dari 2.0+ tersedia online di
http://hg.python.org/cpython/file/X.Y/
(misalnya, 2.7 atau 3.3 ). Jadi, setelah Anda menemukan ituinspect.getfile(datetime)
adalah file.so
atau.pyd
seperti/usr/local/lib/python2.7/lib-dynload/datetime.so
, Anda dapat mencarinya di dalam direktori Modul. Tegasnya, tidak ada cara untuk memastikan mana file mendefinisikan modul yang, tapi hampir semua dari mereka adalah baikfoo.c
ataufoomodule.c
, sehingga seharusnya tidak sulit untuk menebak bahwa datetimemodule.c adalah apa yang Anda inginkan.sumber
__file__
tidak berlaku untuk non-builtin? Saya mengerti di mana merangkak sys.path bisa menyakitkan (terutama tanpa mengetahui tentang meta_path), tetapi apakah kekhawatiran Anda tentang penempatan nama antara__file__
definisi dan binari?__file__
bekerja,inspect.getfile
bekerja; tidak ada situasi di mana menebak apakah menggunakan__file__
akan lebih baik daripada hanya menggunakan modul inspeksi.The
sys.path
daftar berisi daftar direktori yang akan dicari untuk modul saat runtime:sumber
python -c 'import sys; print "\n".join(sys.path)'
akan membiarkan Anda melihatnya tanpa harus jatuh ke dalam python interaktif.python -c 'import sys; print("\n".join(sys.path))'
Jika Anda menggunakan pip untuk menginstal modul Anda, hanya
pip show $module
lokasi yang dikembalikan.sumber
$module
itu dimaksudkan sebagai variabel pengganti, tidak secara harfiah apa yang akan diketik seseorang. Misalnya,m=numpy; pip show $m
... dll, untuk apa punm
)dari pustaka standar coba imp.find_module
sumber
apt-get remove
DataDog dan masih bisa mengimpornya. Ini membantu saya menemukan di mana file-file itu berada (sehingga saya bisa menghapusnya) ketika solusi lain tidak membantu.imp
paket tidak digunakan lagi (sejak versi 3.4) mendukungimportlib
(sejak 3.1) docs.python.org/3.6/library/imp.htmlimport importlib
laluimportlib.util.find_spec('fontTools')
datetime
adalah modul builtin, jadi tidak ada file sumber (Python).Untuk modul yang berasal dari
.py
(atau.pyc
) file, Anda dapat menggunakanmymodule.__file__
, misalnyasumber
Dalam juru bahasa python Anda dapat mengimpor modul tertentu dan kemudian ketik bantuan (modul). Ini memberikan rincian seperti Nama, File, Modul Dokumen, Deskripsi dkk.
Ex:
et al
sumber
Berikut ini adalah satu-liner untuk mendapatkan nama file untuk sebuah modul, cocok untuk alias shell:
Siapkan sebagai alias:
Menggunakan:
sumber
Baru dalam Python 3.2, sekarang Anda dapat menggunakan mis
code_info()
dari modul dis: http://docs.python.org/dev/whatsnew/3.2.html#dissumber
Lihatlah perintah "cdp" yang bagus ini untuk melakukan cd ke direktori yang berisi sumber untuk modul Python yang ditunjukkan:
sumber
Pada windows Anda dapat menemukan lokasi modul python seperti yang ditunjukkan di bawah ini: yaitu menemukan modul rest_framework
sumber
Di Ubuntu 12.04, misalnya paket numpy untuk python2, dapat ditemukan di:
Tentu saja, ini bukan jawaban umum
sumber
Tidak semua modul python ditulis dalam python. Datetime kebetulan menjadi salah satu dari mereka yang tidak, dan (di linux) adalah datetime.so.
Anda harus mengunduh kode sumber ke pustaka standar python untuk mendapatkannya.
sumber
Bagi mereka yang lebih suka solusi GUI: jika Anda menggunakan gui seperti Spyder (bagian dari instalasi Anaconda), Anda bisa mengklik kanan nama modul (seperti "csv" di "import csv") dan pilih "go ke definisi "- ini akan membuka file, tetapi juga di atas Anda dapat melihat lokasi file yang tepat (" C: .... csv.py ")
sumber
Jika Anda tidak menggunakan penerjemah maka Anda dapat menjalankan kode di bawah ini:
Keluaran:
Elemen kedua di Array akan menjadi lokasi paket Anda. Pada kasus ini:
sumber
Cara lain untuk memeriksa apakah Anda memiliki beberapa versi python yang diinstal, dari terminal.
-MBP: ~ python3 -m pip tampilkan pyperclip
Lokasi: /Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-
MBP: ~ python -m pip menunjukkan pyperclip
Lokasi: / Pengguna /umeshvuyyuru/Library/Python/2.7/lib/python/site-packages
sumber
Dalam IDE seperti Spyder, impor modul lalu jalankan modul satu per satu. masukkan deskripsi gambar di sini
sumber
str()
model adalah deskripsi yang lebih akurat tentang apa yang Anda lakukan di tangkapan layar, plus IDE tampaknya tidak relevan untuk solusi ini