Kenapa py dan bukan pyc atau pyo?

8

Ketika saya menginstal paket deb python, katakan python-numpyfile tersebut adalah file python biasa. Bagaimana saya memberi tahu manajer paket - bahwa saya sebenarnya lebih suka menggunakan file pyc atau bahkan lebih baik - pyo?

Adobe
sumber

Jawaban:

12

Anda sudah memilikinya dan sudah menggunakannya

Aplikasi Python yang dikemas dengan baik sedang dikompilasi ke .pycfile 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 .pycfile sangat spesifik untuk sistem Anda (versi Python dan dependensi).

Semua .pyodan .pycfile 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-numpybyte-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

Beberapa informasi latar belakang lainnya

Alasan mengapa ini .pyc/ .pyofile 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 .pyfile, 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.

gertvdijk
sumber
Jadi saya harus membuat tulisan /usr/share/pyshared/untuk diri saya sendiri - untuk mengaktifkan python untuk mengkompilasi file pada jalankan pertama.
Adobe
4
@Adobe What? tidak! Jangan pernah membuat direktori sistem ini dapat ditulisi oleh pengguna. Manajemen paket Anda telah menyusunnya untuk Anda (sesuai dengan apa yang saya coba katakan dalam jawaban saya). Sekarang diperbarui untuk lebih jelas tentang hal itu.
gertvdijk
Anda sekarang - yang baru saja saya lihat /usr/lib/python2.7/dist-packages/numpy- ada pycfile. Saya ingat saya melihat ada beberapa instalasi - dan hanya ada file py biasa. Jadi saya agak "tidak bisa mereproduksi bug".
Adobe
Satu-satunya alasan mengapa .pycbelum 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.
gertvdijk