ฉันจะสร้างแพคเกจ deb สำหรับสคริปต์หลามเดียวได้อย่างไร


78

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

มีใครให้คำแนะนำทีละขั้นตอนเกี่ยวกับสิ่งที่ฉันควรทำอย่างไร python-appindicatorเท่าที่ผมรู้ว่าสคริปต์นี้ขึ้นอยู่กับ

หมายเหตุ:
ฉันไม่ต้องการลิงค์ไปยังคำแนะนำเกี่ยวกับบรรจุภัณฑ์ Debian / Ubuntu ฉันได้เห็นพวกเขาส่วนใหญ่แล้ว ฉันไม่พบพวกเขาเป็นมิตรเริ่มต้น


6
ในขณะที่คำแนะนำในการบรรจุภัณฑ์ Debian และ Ubuntu นั้นไม่ได้เป็นมิตร (ฉันเชื่อใจฉัน) แอพพลิเคชั่น GUI จำนวนมากที่สร้าง debs สำหรับคุณเพียงแค่เปิดข้อผิดพลาดจำนวนมากเมื่อคุณเรียกใช้ตัวตรวจสอบแพ็คเกจขั้นสุดท้ายเช่น lintian หากคุณจริงจังเกี่ยวกับการบรรจุหีบห่อก็ต้องใช้ความพยายามและทำตามคำแนะนำเป็นวิธีที่ดีที่สุดที่จะไป :)
Thomas Boxley

ฉันไม่รู้เกี่ยวกับบรรจุภัณฑ์ แต่ฟังก์ชั่นที่คุณพยายามเพิ่มนั้นมีอยู่ใน Unity แล้ว
มันคือวิลเล็ม

คำตอบ:


84

สิ่งต่อไปนี้เป็นตัวอย่างพื้นฐานของวิธีที่แพ็กเกจซอร์สสำหรับสคริปต์ไพ ธ อนอาจมีลักษณะ ในขณะที่บทเรียนการใช้บรรจุภัณฑ์ส่วนใหญ่มีความซับซ้อนเล็กน้อยพวกเขาสามารถช่วยได้จริงหากคุณประสบปัญหา ที่กล่าวว่าฉันได้เรียนรู้พื้นฐานของบรรจุภัณฑ์ Debian เป็นครั้งแรกเพียงแค่ดูแพ็คเกจ Debian apt-get sourceสิ่งที่คล้ายกันและเรียนรู้ด้วยตัวอย่าง

นี่คือเค้าโครงแพคเกจพื้นฐานของคุณ:

my-script/
    -- myScript
    -- debian/
        -- changelog
        -- copyright
        -- compat
        -- rules
        -- control
        -- install

เรียกใช้dch --createในไดเรกทอรีเพื่อสร้างdebian/changelogรายการที่จัดรูปแบบอย่างเหมาะสม

เดเบียน / ลิขสิทธิ์ควรมีลักษณะดังนี้:

Format: http://www.debian.org/doc/packaging-manuals/copyright-format/1.0/
Upstream-Name: myScript
Upstream-Contact: Name, <email@address>

Files: *
Copyright: 2011, Name, <email@address>
License: (GPL-2+ | LGPL-2 | GPL-3 | whatever)
 Full text of licence.
 .
 Unless there is a it can be found in /usr/share/common-licenses

debian / compatสามารถเป็น:7

เดเบียน / กฎ :

#!/usr/bin/make -f

%:
    dh $@ --with python2

โปรดทราบว่าจะต้องมี "แท็บ" ก่อนหน้า dh $@ --with python2ไม่ใช่ที่ว่าง

เดเบียน / ควบคุม :

Source: my-script
Section: python
Priority: optional
Maintainer: Name, <email@address>
Build-Depends: debhelper (>= 7),
               python (>= 2.6.6-3~)
Standards-Version: 3.9.2
X-Python-Version: >= 2.6


Package: my-script
Architecture: all
Section: python
Depends: python-appindicator, ${misc:Depends}, ${python:Depends}
Description: short description
 A long description goes here.
 .
 It can contain multiple paragraphs

เดเบียน / ติดตั้ง :

myScript usr/bin/

ไฟล์นี้ระบุว่าไฟล์ใดจะถูกติดตั้งลงในโฟลเดอร์ใด

ตอนนี้สร้างด้วย debuild --no-tgz-check

สิ่งนี้จะสร้างแพ็คเกจ deb ที่ใช้งานได้ Lintian กำลังจะโยนคำเตือนบางอย่างเกี่ยวกับการขาด orig.tar.gz แต่ถ้าคุณวางแผนที่จะสร้างโครงการต้นน้ำที่เหมาะสมที่ทำให้การเผยแพร่ tarball คุณอาจต้องการที่จะละเว้นในตอนนี้


12
ในฐานะที่เป็นผู้ทำแพ็กเกจ (และผู้สำรองข้อมูล) ฉันทำแพ็กเกจสคริปต์ไพ ธ อนค่อนข้างบ่อย ฉันสามารถพูดได้อย่างปลอดภัยว่าคำตอบนี้เป็นคำอธิบายที่สมบูรณ์ที่สุดของสิ่งที่ต้องทำในการสร้างแพ็คเกจสำหรับสคริปต์ไพ ธ อนตัวเดียว
โธมัสวอร์ด

2
คุณสามารถอัปเดตเป็น Python 3 ได้หรือไม่ ฉันเดาว่าเราจำเป็นต้องทำการเปลี่ยนแปลงdebian/rulesและdebian/controlแต่ฉันไม่แน่ใจเกี่ยวกับสิ่งนั้น
Aditya

1
@Aditya อาจมีคำถามใหม่สำหรับ Python3 หรือไม่ คำตอบจะไม่แตกต่างกันมาก แต่คำตอบนี้มีวัตถุประสงค์เพื่อเป็นตัวอย่างขั้นต่ำที่ง่ายที่สุด / เปลือยของวิธีการแพคเกจสคริปต์ Python ไม่แน่ใจว่าฉันต้องการทำให้ยุ่งเหยิงด้วยการใช้งานหลายอย่าง
andrewsomething

@ andrewsomething: จากนั้นคุณอาจจะสนใจในสิ่งนี้ซึ่งได้รับแจ้งให้ฉันออกความคิดเห็นที่ ... จำเป็นต้องมีการแก้ไขเล็กน้อยในที่หนึ่งฉันจะลองใช้มือของฉันที่ ...
Aditya

1
แล้วห้องสมุดล่ะ ถ้าสคริปต์ไพ ธ อนนำเข้าไลบรารีมันจะไม่ทำงาน
D.Snap

18
  1. สร้างโฟลเดอร์ที่มีชื่อใด ๆ ในบ้านของคุณเช่น: mypyscript
  2. เปิดโฟลเดอร์และสร้างสองโฟลเดอร์ด้วยชื่อ 'DEBIAN' และ 'usr'
  3. เปิดโฟลเดอร์ DEBIAN สร้างไฟล์ข้อความ (ไม่มีส่วนขยาย) พร้อมชื่อ 'control' ที่นั่น
  4. เปิด 'ควบคุม' และพิมพ์ดังต่อไปนี้และบันทึกลงบน DEBIAN

    Package: mypyscript
    Version: 0.01
    Architecture: all
    Maintainer: your name<your mail id>
    Installed-Size: 2
    Depends: python-appindicator
    Section: extras
    Priority: optional
    Homepage: your homepage
    Description: describe
  5. กลับไปที่โฟลเดอร์ชื่อ mypyscript เปิด 'usr' สร้างโฟลเดอร์ชื่อ 'bin' เปิด 'bin' และวางไฟล์ pythonscript ของคุณที่นั่น

  6. คุณสามารถสร้างรายการเมนูได้ แต่นั่นไม่จำเป็น
  7. กลับไปที่โฟลเดอร์หลักที่โฟลเดอร์ 'mypyscript' อยู่หรือปิดเบราว์เซอร์ไฟล์
  8. เปิดเทอร์มินัล ต้องแน่ใจว่าเทอร์มินัลนั้นอยู่ในโฟลเดอร์โฮม พิมพ์dpkg -b mypyscript. จากนั้นกด Enter ในไม่กี่วินาทีแพคเกจ deb ของคุณพร้อม

หมายเหตุ:โปรดกรอกไฟล์ 'ควบคุม' อย่างถูกต้อง อย่าใช้อะพอสโทรฟี มันเป็นเพียงสำหรับการระบุชื่อ


1
ใช้งานได้ดี! คำตอบที่ยอมรับนั้นซับซ้อน
SuB

อย่าลืมเปลี่ยนการอนุญาตของ 'myscript' เป็น 755 และเจ้าของเป็นรูท
SuB

ฉันจะสร้างรายการเมนูได้อย่างไร
To Do

9

คุณสามารถลองด้วยDebreateเครื่องมือ GUI สำหรับสร้างแพ็คเกจ


ทำให้มันเจ๋งมาก ฉันชอบมันจนถึงตอนนี้เพิ่งเริ่มใช้มันเพื่อสร้างจากซอร์สโค้ดของไพ ธ อน
answerSeeker

3

ฉันจะตรวจสอบอย่างรวดเร็วเหมาะสำหรับการสร้างแอปอย่างรวดเร็วและสร้าง debs google หรือคุณสามารถหาบทเรียนที่นี่http://developer.ubuntu.com/


ใช่ฉันต้องการเพิ่มด้วย wiki.ubuntu.com/ ได้อย่างรวดเร็วหากคุณชอบวิดีโออย่างฉันyoutubeเป็นแหล่งข้อมูลชั้นยอด
Jiew Meng

ไม่สามารถเปลี่ยนแพคเกจเป็นแพคเกจ. deb ได้อย่างรวดเร็ว
Archisman Panigrahi

2

ลองpkgme มันควรจะแค่ทำงาน

ติดตั้งผ่าน:

sudo apt install pkgme

วิ่งผ่าน:

pkgme
debuild

(ผู้พัฒนาใหม่อาจต้องเรียกใช้gpg --gen-keyดูการพัฒนา Keysigningเพื่อทำสิ่งนี้อย่างถูกต้อง)


1

ในขณะเดียวกันมีบทความที่อธิบายถึงภาวะที่กลืนไม่เข้าคายไม่ออกที่พบในhttps://www.nylas.com/blog/packaging-deploying-python/ ส่วนใหญ่ระบุว่ามี dh-virtualenv ทำงานร่วมกับ make-deb เพื่อปรับใช้รหัส Python ได้อย่างง่ายดายเพียงแค่ใช้ไฟล์ setup.py คู่มือสั้น ๆ สามารถดูได้ที่https://gist.github.com/JeOam/bc6cbf38f04d6f9dbf81


0

คุณสามารถลองใช้Debreate

นี่คืออินเทอร์เฟซ Gui เพื่อสร้างแพ็คเกจและสิ่งต่าง ๆ ที่คุณสามารถใช้ PPA ได้เช่นกันหากคุณไม่ต้องการดาวน์โหลดจากเว็บไซต์ที่ระบุไว้ข้างต้น

sudo add-apt-repository ppa:antumdeluge/<ppaname>; sudo apt update; sudo apt install debreate

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

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