แพคเกจ Debian สามารถติดตั้งโมดูล Python จาก PyPI ได้อย่างไร


20

คำถามนี้พยายามที่จะเติมเต็มนี้ ฉันมีแอพหลามที่ใช้โมดูลบุคคลที่สามจาก PyPI ฉันต้องการจัดทำแอปของฉันลงในแพ็คเกจ debian แต่ไม่ทราบวิธีจัดการกับการอ้างอิงของ Python ที่ไม่ได้อยู่ในที่เก็บเดเบียน / อูบุนตู (บรรจุเป็นแพคเกจเดเบียน)

โซลูชัน # 1:
สร้างโมดูลจาก PyPI ลงในแพ็คเกจ debian ของฉัน

โซลูชัน # 2:
สร้างแพ็คเกจ debian สำหรับโมดูล PyPI ทั้งหมดที่ฉันต้องการใช้stdebและเพิ่มไปยังที่เก็บ debian / ubuntu

ฉันต้องการโซลูชัน # 3จริง ๆเพราะฉันต้องการติดตั้งการอ้างอิง PyPI เมื่อฉันติดตั้งแพ็คเกจ debian โดยเฉพาะอย่างยิ่งใน virtualenv!

สิ่งที่จะเป็นโซลูชั่น # 3 ? ฉันจำเป็นต้องปรับแต่ง สคริปต์DEBIAN / preinst ผู้ดูแลหรือไม่


คุณช่วยอธิบายได้ไหมว่าทำไมคุณต้องสร้างแพ็คเกจ Debian? แอพ Python ของคุณต้องการทรัพยากรที่ไม่ใช่ Python หรือไม่?
Jonathan

@Jonathan ฉันต้องการให้ผู้ใช้สามารถติดตั้งแอพของฉันได้จาก Ubuntu Software Center ฉันคิดว่าฉันต้องการ * .deb สำหรับสิ่งนั้น แอพ Python ของฉันไม่ต้องการทรัพยากรที่ไม่ใช่ Python เป็นเพียงโมดูล python ของบุคคลที่สาม
andri_ch

@Jonathan Debian packages เป็นวิธีการติดตั้งมาตรฐานใน Ubuntu หนึ่งสามารถกระจาย.debไฟล์หรือตั้งค่าพื้นที่เก็บข้อมูลส่วนตัวหรือ PPA ใน Launchpad
MestreLion

คำตอบ:


20

ฉันได้พูดคุยกับผู้ดูแลบางคนที่ Debian IRC channel irc: //irc.debian.org #debian-mentorsขอสิ่งเดียวกันแน่นอนและฉันทามติทั่วไปคือ:

โซลูชัน # 1:

การรวมการพึ่งพาในแพคเกจของคุณโดยการคัดลอกไฟล์ต้นฉบับของพวกเขาในขณะที่ codebase เดียวเป็นfrowned มาก มันจะเอาชนะจุดประสงค์ของระบบบรรจุภัณฑ์ที่จัดการการพึ่งพาการอัปเดตการกำหนดเวอร์ชัน ฯลฯ

โซลูชัน # 3:

การดาวน์โหลดแพ็คเกจที่ไม่ใช่ debian on-the-fly เมื่อติดตั้งไบนารี ( .deb) เป็นความเสี่ยงด้านความปลอดภัยที่ร้ายแรงแน่นอนว่าไม่ต้องทำ คุณจะไม่สามารถตรวจสอบ การพึ่งพาโดยการแตกไฟล์debเพราะดาวน์โหลดและติดตั้งเมื่อทำการติดตั้ง มันเป็นวิธีการที่เลี่ยงผ่านระบบที่เก็บข้อมูลอย่างสมบูรณ์ ผู้ใช้ที่เกี่ยวข้องจะไม่พอใจกับแพ็คเกจที่อยู่เบื้องหลัง (และrootจำได้!) ดาวน์โหลดซอฟต์แวร์ที่ไม่น่าเชื่อถือเพิ่มเติมจากแหล่งที่ไม่น่าเชื่อถือ ใช่ว่าจะต้องเล่นซอกับDEBIAN/postinst(หรือpreinst) และออกwget(หรือในกรณีของคุณpip install) และนั่นคือวิธีการที่ใช้โดย Flash, Oracle Java, Steam และอื่น ๆ แต่นั่นเป็นกรรมสิทธิ์ซอฟต์แวร์โอเพนซอร์ซดังนั้นความปลอดภัยจึงไม่มีเลย

โซลูชัน # 1.5:

คุณไม่ได้พูดถึงมัน แต่คุณสามารถบูรณาการอ้างอิงเท่านั้นที่เวลาในการสร้างคือในแหล่งที่มาของแพคเกจ (คน.orig.tar.gz, .debian.tar.gz, .dscสาม) โดยการดาวน์โหลดจาก PyPi เมื่อสร้างแพคเกจ "ฐาน" (คน.deb) คำแนะนำสำหรับการที่pip installจะเข้าไปdebian/rules(สังเกตตัวพิมพ์เล็กdebianเมื่อเทียบกับแพคเกจไบนารี) และจะได้รับการดำเนินการเมื่อคุณออกหรือdebuilddpkg-buildpackage

นี่คือพื้นกลางระหว่าง # 1 และ # 3 มันช่วยลด (แต่ไม่แก้ปัญหา!) ปัญหาบางอย่างของ # 3: อย่างน้อยคุณสามารถตรวจสอบผลิตภัณฑ์ขั้นสุดท้ายและ.debจะไม่ต้องใช้อินเทอร์เน็ตในเวลาติดตั้ง ความเสี่ยงและภาระทั้งหมดจะถูกถ่ายโอนจากผู้ใช้ขั้นสุดท้ายไปยังผู้ดูแลแพ็คเกจ แต่มีปัญหาเช่นเดียวกับ # 1 เนื่องจากมันผ่านโครงสร้างพื้นฐานของระบบบรรจุภัณฑ์ส่วนใหญ่ หลังจากนั้นการจัดการการอ้างอิง (รุ่นการอัปเดตข้อกำหนดความขัดแย้ง) เป็นสาเหตุdpkg/ aptถูกสร้างขึ้นตั้งแต่แรก! :)

โซลูชัน # 2:

หนึ่งทรูทางขวา™ คุณสร้างแพคเกจเดเบียนสำหรับการอ้างอิงของคุณรายการพวกเขาเป็นข้อกำหนดในแพคเกจของคุณและจัดส่งแพคเกจทั้งหมด.debsหรือแหล่งที่มา

จากตรงนั้นคุณมีตัวเลือกมากมาย:

  • ส่งแพ็คเกจต้นทางทั้งซอฟต์แวร์ของคุณและการขึ้นต่อกันเพื่อรวมไว้ใน Debian หากได้รับการยอมรับผู้ใช้ Debian ทุกคนจะสามารถใช้งานได้โดยอัตโนมัติรวมถึงตราสารอนุพันธ์ทั้งหมดเช่น Ubuntu

  • อัปโหลดแพ็กเกจซอร์สไปยังLaunchpadดังนั้นการสร้างPPAที่ผู้ใช้ Ubuntu ใด ๆ (และอนุพันธ์ของมันเช่น Linux Mint) สามารถเพิ่มและติดตั้งได้อย่างง่ายดาย

  • โฮสต์ที่เก็บเดเบียนของคุณเองในเว็บไซต์ของคุณที่ผู้ใช้จากระบบที่ใช้เดเบียนสามารถเพิ่มลงในพวกเขา/etc/apt/sources.list.dและใช้aptโครงสร้างพื้นฐานเพื่อดาวน์โหลดติดตั้งและอัปเดตอยู่เสมอ (เช่นด้านบน!)

  • โฮสต์.debไฟล์สำหรับการดาวน์โหลดและติดตั้งโดยตรง ไม่มีaptการอัปเดตอัตโนมัติหรือเกี่ยวข้องกับความคิด

สำหรับวิธีจัดแพคเกจการพึ่งพา PyPi ของคุณ (และซอฟต์แวร์หลามของคุณด้วย!) มีเครื่องมือและการอ้างอิงหลายอย่างที่ทำให้กระบวนการง่ายขึ้น:

  • stdebตามที่คุณพูดถึง Oldie และ Goodie

  • Pybuild , เครื่องมือใหม่ที่น่าตื่นตาตื่นใจจาก Debian stdebแทนที่ว่า

และการอ้างอิงที่มีประโยชน์มากมาย:

ต้องการความช่วยเหลือ? ลองดูสิ


2

ฉันคิดว่าคุณเพียงแค่ต้องเพิ่มรหัสบรรทัดคำสั่งที่เกี่ยวข้องลงในสคริปต์ postinst ในแพ็คเกจ. deb พบในคำตอบนี้รายละเอียดเพิ่มเติมได้ที่คู่มือเดเบียนอย่างเป็นทางการ



0

พวกเขาไม่เหมือน cpan ใน perl ถ้าคุณมีใน repositories คุณอาจติดตั้งด้วย apt-get ถ้าไม่ใช่คุณอาจติดตั้ง pip ด้วยความแตกต่างก็คือ pip นั้นติดตั้งใน / usr / local

ในการติดตั้งด้วย pip คุณสามารถทำได้:

apt-get install python-pip 
pip install foopackage 

ตัวอย่างเช่น:

pip install MultipartPostHandler2

นี่ไม่ได้ตอบคำถามของ OP คำถามคือทำอย่างไรถึงจะมีแพ็คเกจ Debian ติดตั้งแพ็กเกจ Python จาก PyPi เพื่อให้ 'apt-get <custom-package>' หรือ 'dpkg -i <custom-package>' จะดึงการอ้างอิงของ Python จาก PyPi
SevakPrime

พวกเขาทำไม่ได้เหมือน cpan ใน perl ถ้าคุณมีใน repositories คุณอาจติดตั้งด้วย apt-get ถ้าไม่ใช่คุณอาจติดตั้ง pip ด้วยความแตกต่างก็คือ pip นั้นติดตั้งใน / usr / local แต่บางทีมันอาจจะ จะดีกว่าลบคำตอบของฉัน
Sérgio

ความคิดเห็นของคุณให้คำตอบที่เหมาะสมกับคำถามของ OP คุณควรใส่ความคิดเห็นนั้นในคำตอบเพื่อให้ได้รับการโหวต (ตัวอย่างเช่นดูคำตอบของ MestreLion) เช่นเดียวกับคำตอบของคุณไม่ตอบคำถามของ OP
SevakPrime
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.