Ketika saya menginstal paket deb python, katakan python-numpy
file tersebut adalah file python biasa. Bagaimana saya memberi tahu manajer paket - bahwa saya sebenarnya lebih suka menggunakan file pyc atau bahkan lebih baik - pyo?
sumber
Ketika saya menginstal paket deb python, katakan python-numpy
file tersebut adalah file python biasa. Bagaimana saya memberi tahu manajer paket - bahwa saya sebenarnya lebih suka menggunakan file pyc atau bahkan lebih baik - pyo?
Aplikasi Python yang dikemas dengan baik sedang dikompilasi ke .pyc
file dalam skrip dijalankan setelah instalasi file telah terjadi. Ini diperlukan sesuai dengan pedoman pengemasan untuk dapat mengadopsi instalasi Python yang Anda gunakan pada saat itu. Ingat bahwa .pyc
file sangat spesifik untuk sistem Anda (versi Python dan dependensi).
Semua .pyo
dan .pyc
file karena itu secara khusus dikecualikan dalam paket dan ditandai sebagai kesalahan oleh Lintian :
File sumber python yang dikompilasi tidak boleh dimasukkan dalam paket. File-file ini harus dihapus dari paket dan dibuat pada waktu instalasi paket di postinst.
Rujuk ke Kebijakan Debian Python bagian 2.6 ( Modul-Kompilasi Byte ) untuk detailnya.
Keparahan: serius, Kepastian: pasti
Dalam hal python-numpy
byte-kompilasi post-install ini ditangani oleh hook debhelper dari pycentral. Setelah instalasi terlihat seperti ini:
ls -l /usr/lib/python2.7/dist-packages/numpy
lrwxrwxrwx 1 root root 47 Mar 20 2012 add_newdocs.py -> ../../../../share/pyshared/numpy/add_newdocs.py
-rw-r--r-- 1 root root 251912 Aug 6 22:06 add_newdocs.pyc
Alasan mengapa ini .pyc
/ .pyo
file tidak dikompilasi pada saat runtime selama startup aplikasi pertama seperti yang Anda harapkan adalah sebagai berikut.
File Python diinstal di direktori seluruh sistem, tersedia untuk semua pengguna di sistem. Setiap kali pengguna memulai aplikasi, juru bahasa Python dapat membaca .py
file, tetapi tidak dapat menulis ke direktori (misalnya /usr/lib/python2.7/dist-packages/
). Ini adalah bagian dari keamanan umum di semua sistem Linux; pengguna tidak boleh menulis /usr
, hanya dengan hak root ini harus dimungkinkan. Untuk alasan ini, kait APT akan mengkompilasi file Python untuk Anda pada saat instalasi; pertama untuk meminimalkan ukuran paket, kedua untuk dapat retrigger hooks ketika sesuatu berubah pada sistem Anda tentang Python, karena itu diperlukan untuk mengkompilasi ulang ketika mereka menjadi tidak kompatibel selama upgrade misalnya.
Namun, ini tidak akan memengaruhi file python reguler milik pengguna yang sedang dikompilasi saat runtime.
/usr/share/pyshared/
untuk diri saya sendiri - untuk mengaktifkan python untuk mengkompilasi file pada jalankan pertama./usr/lib/python2.7/dist-packages/numpy
- adapyc
file. Saya ingat saya melihat ada beberapa instalasi - dan hanya ada file py biasa. Jadi saya agak "tidak bisa mereproduksi bug"..pyc
belum ada adalah karena paket tersebut belum diinstal sepenuhnya. Setelah membongkar ada langkah lain yang harus diambil. IIRC hook python-central dijalankan hanya setelah semua paket diinstal. Jadi, dalam sesi APT berjalan atau terganggu menginstal paket pengamatan Anda mungkin bisa dibuat.