Làm cách nào để tạo gói gỡ lỗi cho một tập lệnh python?


78

Tôi có một tập lệnh python duy nhất mà tôi muốn phân phối dưới dạng gói deb. Đây là một chỉ báo hiển thị ngày địa phương trong bảng Unity. Tôi đã theo dõi việc tạo Gói .deb từ tập lệnh hoặc tệp nhị phân nhưng tôi không thể tạo gói gỡ lỗi vì không thành công.

Ai đó có thể cho tôi một hướng dẫn từng bước về những gì tôi nên làm không? Theo tôi biết kịch bản này phụ thuộc vào python-appindicator.

LƯU Ý:
Tôi không muốn bất kỳ liên kết nào đến hướng dẫn đóng gói Debian / Ubuntu. Tôi đã thấy hầu hết trong số họ. Tôi không thấy họ thân thiện với người mới bắt đầu.


6
Mặc dù hướng dẫn đóng gói Debian và Ubuntu không thân thiện với người mới bắt đầu (tôi tin là tôi biết), nhiều ứng dụng GUI tạo ra các cuộc tranh luận cho bạn chỉ xuất hiện một loạt lỗi khi bạn chạy trình kiểm tra gói cuối cùng, chẳng hạn như lintian. Nếu bạn nghiêm túc về việc đóng gói, thì hãy kiên trì thực hiện và làm theo hướng dẫn là cách tốt nhất để đi :)
Thomas Boxley

Tôi không biết về bao bì, nhưng chức năng bạn đang cố gắng thêm vào được tích hợp trong Unity.
Đó là Willem

Câu trả lời:


84

Dưới đây là một ví dụ cơ bản về cách gói nguồn cho tập lệnh python có thể trông như thế nào. Mặc dù hầu hết các hướng dẫn đóng gói hơi phức tạp, nhưng chúng thực sự có thể giúp ích nếu bạn gặp sự cố. Điều đó nói rằng, lần đầu tiên tôi đã học được những điều cơ bản về bao bì Debian bằng cách chỉ cần nhìn vào các gói Debian. apt-get sourcemột cái gì đó tương tự và học bằng ví dụ.

Đây là cách bố trí gói nguồn cơ bản của bạn:

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

Chạy dch --createtrong thư mục để tạo một debian/changelogmục được định dạng đúng .

debian / bản quyền sẽ giống như:

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 chỉ có thể là:7

debian / quy tắc :

#!/usr/bin/make -f

%:
    dh $@ --with python2

Lưu ý rằng phải có "tab" trước dh $@ --with python2, không phải khoảng trắng.

debian / kiểm soát :

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

debian / cài đặt :

myScript usr/bin/

Tập tin này cho biết tập tin nào sẽ được cài đặt vào thư mục nào.

Bây giờ xây dựng nó với debuild --no-tgz-check

Điều này sẽ tạo ra một gói deb chức năng. Lintian sẽ đưa ra một vài cảnh báo liên quan đến việc thiếu orig.tar.gz, nhưng trừ khi bạn có kế hoạch tạo một dự án ngược dòng thích hợp để tạo ra các bản phát hành tarball mà bây giờ bạn có thể muốn bỏ qua.


12
Là một packager (và một backporter), tôi gói script python khá thường xuyên. Tôi có thể nói rằng câu trả lời này ở đây là lời giải thích đầy đủ nhất về những gì cần làm để tạo một gói cho một tập lệnh python duy nhất.
Thomas Ward

2
Bạn cũng có thể cập nhật nó cho Python 3 không? Tôi đoán chúng ta cần phải thay đổi debian/rulesdebian/control, nhưng tôi không chắc về điều đó.
Aditya

1
@Aditya, có lẽ một câu hỏi mới là dành cho Python3? Câu trả lời sẽ không khác lắm, nhưng câu trả lời này nhằm trở thành ví dụ tối thiểu / đơn giản nhất về cách đóng gói tập lệnh Python. Không chắc chắn tôi muốn làm lộn xộn nó với nhiều triển khai.
andrews Something

@andrews Something: Sau đó, bạn có thể quan tâm đến cái này khiến tôi phải để lại bình luận đó ... Một chút chỉnh sửa là bắt buộc, tôi sẽ thử dùng nó ...
Aditya

1
Còn các thư viện thì sao? Nếu tập lệnh python nhập thư viện thì nó sẽ không hoạt động
D.Snap

18
  1. tạo một thư mục với bất kỳ tên nào trong nhà của bạn, ví dụ: mypyscript
  2. Mở thư mục và tạo hai thư mục có tên 'DEBIAN' và 'usr'
  3. Mở thư mục DEBIAN. Tạo một tệp văn bản (không có phần mở rộng) với tên 'control' ở đó.
  4. Mở 'control' và gõ như sau và lưu nó trên 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. Quay lại thư mục có tên mypyscript. Mở 'usr'. Tạo một thư mục có tên 'bin'. Mở 'bin' và dán tệp pythonscript của bạn ở đó.

  6. Bạn cũng có thể thực hiện một mục menu. Nhưng điều đó không cần thiết.
  7. Quay lại thư mục chính nơi thư mục 'mypyscript' nằm hoặc đóng trình duyệt tệp.
  8. Mở thiết bị đầu cuối. Hãy chắc chắn rằng thiết bị đầu cuối là trong thư mục nhà. gõ. dpkg -b mypyscriptSau đó nhấn enter. Trong vài giây, gói deb của bạn đã sẵn sàng

lưu ý: vui lòng điền đúng tệp 'control'. Đừng sử dụng dấu nháy đơn. Nó chỉ để chỉ tên.


1
Hoạt động tuyệt vời! Câu trả lời được chấp nhận là phức tạp.
SuB

Đừng quên thay đổi quyền của 'myscript' thành 755 và chủ sở hữu của nó thành root.
SuB

Làm thế nào để tôi tạo một mục menu?
Làm

9

Bạn có thể thử với Debreate , một công cụ GUI để tạo các gói.


Debcreate là mát mẻ. Tôi thích nó cho đến nay, mới bắt đầu sử dụng nó ngày hôm nay để xây dựng từ mã nguồn python.
answerSeeker

3

Tôi sẽ kiểm tra nhanh chóng, tuyệt vời để tạo các ứng dụng nhanh và tạo các cuộc tranh luận google nó hoặc bạn có thể tìm thấy các hướng dẫn tại đây http: //developer.ub Ubuntu.com/


Vâng, tôi cũng muốn thêm. wiki.ubfox.com/Quickly , nếu bạn thích các video như tôi, youtube là một tài nguyên tuyệt vời
Jiew Meng

Nhanh chóng không thể đơn giản biến một gói thành gói .deb
Archisman Panigrahi

2

Hãy thử pkgme . Nó được cho là chỉ hoạt động.

Cài đặt qua:

sudo apt install pkgme

Chạy qua:

pkgme
debuild

(Một nhà phát triển mới có thể phải chạy gpg --gen-key, hãy xem Phát triển phím để thực hiện việc này một cách chính xác)



0

Bạn có thể thử sử dụng Debreate

Đây là Giao diện Gui để tạo các gói và nội dung bạn có thể sử dụng PPA nếu bạn không muốn tải xuống từ trang web được liệt kê ở trên.

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

Ive đã tiến hành ppa để nó chạy như một dòng mã! Cảm ơn câu hỏi tuyệt vời và hãy chắc chắn để tiếp tục đưa những dòng mã đó vào thiết bị đầu cuối!

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.