Pertanyaan ini mencoba melengkapi yang satu ini . Saya memiliki aplikasi python yang menggunakan modul pihak ketiga dari PyPI. Saya ingin mengemas aplikasi saya menjadi paket debian, tetapi tidak tahu bagaimana menangani dependensi python yang tidak dalam repositori debian / ubuntu (dikemas sebagai paket debian juga)
Solusi # 1:
bangun modul dari PyPI langsung ke paket debian saya.
Solusi # 2:
buat paket debian untuk semua modul PyPI yang saya perlukan menggunakan stdeb dan menambahkannya ke repositori debian / ubuntu.
Saya sebenarnya membutuhkan Solusi # 3 karena saya ingin menginstal dependensi PyPI ketika saya menginstal paket debian saya, lebih disukai ke dalam virtualenv!
Apa yang akan menjadi Solusi # 3 ? Apakah saya perlu mengubah skrip DEBIAN / preinst maintainer?
sumber
.deb
file, atau mengatur repositori pribadi, atau PPA di Launchpad.Jawaban:
Saya telah berbicara dengan beberapa pengelola di saluran IRC Debian irc: //irc.debian.org#debian-mentors , menanyakan hal yang persis sama, dan konsensus umum adalah:
Solusi # 1:
Mengintegrasikan dependensi dalam paket Anda dengan menyalin file sumber mereka sebagai basis kode tunggal sangat disukai. Itu akan mengalahkan tujuan dari sistem pengemasan yang menangani dependensi, pembaruan, versi, dll.
Solusi # 3:
Mengunduh paket non-debian dengan cepat saat memasang biner (
.deb
) adalah risiko keamanan yang serius , jelas tidak boleh. Anda bahkan tidak akan dapat memeriksa dependensi dengan mengekstraksideb
, karena mereka diunduh dan diinstal pada waktu instalasi. Ini adalah pendekatan yang sepenuhnya memotong sistem repositori. Tidak ada pengguna yang peduli akan senang dengan paket yang, di belakang layar (dan sepertiroot
, ingat!), Mengunduh perangkat lunak tidak terpercaya tambahan dari sumber yang tidak terpercaya. Ya, itu akan membutuhkan mengutak-atikDEBIAN/postinst
(ataupreinst
) dan mengeluarkanwget
(atau, dalam kasus Anda,pip install
), dan itulah pendekatan yang diambil oleh Flash, Oracle Java, Steam dan lainnya. Tapi itu adalah perangkat lunak berpemilik, sumber tertutup, jadi keamanan mereka tidak ada.Solusi # 1.5:
Anda tidak menyebutkan hal itu, tapi Anda bisa mengintegrasikan dependensi hanya pada waktu pembangunan , yakni di sumber paket (yang
.orig.tar.gz
,.debian.tar.gz
,.dsc
triad), dengan men-download dari PyPI saat membuat "biner" paket (yang.deb
). Instruksi untukpip install
akan masukdebian/rules
(perhatikan huruf kecildebian
, yang bertentangan dengan paket biner), dan akan dieksekusi ketika Anda mengeluarkandebuild
ataudpkg-buildpackage
.Ini adalah jalan tengah antara # 1 dan # 3. Ini mengurangi (tetapi tidak menyelesaikan!) Beberapa masalah # 3: setidaknya Anda dapat memeriksa produk akhir, dan
.deb
tidak akan memerlukan akses internet pada waktu pemasangan. Semua risiko dan beban ditransfer dari pengguna akhir ke pengelola paket. Tetapi, memiliki masalah yang sama dengan # 1, karena memotong sebagian besar infrastruktur sistem pengemasan. Afterall, penanganan dependensi (Versi, update, persyaratan, konflik) adalah mengapadpkg
/apt
diciptakan di tempat pertama! :)Solusi # 2:
The One True Right Way ™ . Anda membuat paket debian untuk dependensi Anda, daftar mereka sebagai persyaratan dalam paket Anda, dan mengirimkan semua
.debs
paket sumber atau.Dari sana, Anda memiliki sejumlah opsi:
Kirimkan paket sumber, baik perangkat lunak Anda dan dependensinya, untuk dimasukkan ke Debian. Jika diterima, mereka akan secara otomatis tersedia untuk semua pengguna Debian, termasuk semua turunan seperti Ubuntu.
Unggah paket sumber ke Launchpad , sehingga menciptakan PPA yang dapat dengan mudah ditambahkan dan diinstal oleh pengguna Ubuntu (dan turunannya seperti Linux Mint)
Host repositori debian Anda sendiri di situs web Anda, yang dapat ditambahkan oleh pengguna dari sistem berbasis Debian apa pun
/etc/apt/sources.list.d
dan gunakanapt
infrastruktur untuk mengunduh, menginstal, dan terus memperbarui, (seperti di atas!)Host
.deb
file untuk unduh dan instal langsung. Tidak adaapt
atau pembaruan otomatis yang terlibat dipikirkan.Adapun cara mengemas dependensi PyPi Anda (dan perangkat lunak python Anda juga!), Ada sejumlah alat dan referensi yang membuat prosesnya mudah:
stdeb , seperti yang Anda sebutkan. Oldie dan goodie.
Pybuild , alat baru dan luar biasa dari Debian yang menggantikan
stdeb
.Dan banyak referensi bermanfaat:
Panduan Gaya untuk Pengemasan Perpustakaan Python
Kebijakan Debian Python
Butuh bantuan? Lihat itu:
FAQ Mentor Debian
Tim Pengemasan Python
sumber
Saya pikir Anda hanya perlu menambahkan kode baris perintah yang relevan ke skrip postinst dalam paket .deb. Ditemukan dalam jawaban ini , lebih detail di panduan debian resmi .
sumber
Ada
pypi2deb
untuk mendapatkan paket dari pypi dan membuatnya menjadi paket deb.sumber
Mereka tidak, seperti cpan di perl, jika Anda memiliki dalam repositori, Anda dapat menginstal dengan apt-get, jika tidak Anda dapat menginstal dengan pip, perbedaannya adalah instalasi pip di / usr / local.
Untuk menginstal dengan pip Anda dapat melakukan:
sebagai contoh:
sumber