2012-03-05 4 views
12

Tôi đã viết một vài thư viện Perl (.pm) và Perlscripts (.pl) trên Ubuntu và tôi cần phân phối chúng cho đồng nghiệp của tôi trong văn phòng của tôi. Các tập lệnh và thư viện đó yêu cầu thư viện của bên thứ ba. Tôi muốn làm cho nó rất đơn giản.Có cách nào đơn giản nhất để xây dựng gói perl

Thông tin về tôi.

  • Tôi biết cách tạo tập lệnh Perl.
  • Tôi biết cách tạo tệp bash.
  • Tôi không có kinh nghiệm trong việc tạo ra MAKE tập tin, rpm, Deb, vv
+0

Nếu các đồng nghiệp của bạn đều có Ubuntu (tốt nhất là cùng một phiên bản) và có đủ chúng, bạn nên học cách xây dựng gói '* .deb'. –

+0

@BasileStarynkevitch, tôi không muốn làm cho nó cụ thể. Họ là người dùng Linux hoặc Mac –

+0

Bạn đã đọc [Module :: Build] (http://search.cpan.org/dist/Module-Build/lib/Module/Build.pm) chưa? – Konerak

Trả lời

15

tôi khuyên bạn nên sử dụng Module::Starter để thiết lập một khuôn mẫu cho mỗi mô-đun. Sau khi cài đặt, bạn có thể gọi module-starter từ dòng lệnh, ví dụ:

module-starter --module=My::Module --author="Jessada Thutkawkorapin" [email protected] 

hoặc, nếu bạn muốn có một phân phối với nhiều mô-đun:

module-starter --distro=Foo --module=Foo,Foo::Bar,Foo::Baz --author="Jessada Thutkawkorapin" [email protected] 

Sau đó, chỉ cần ghi đè lên .pm file với các module của bạn , bao gồm bất kỳ kiểm tra đơn vị nào mà bạn muốn chạy (các kiểm tra mặc định về cơ bản kiểm tra cú pháp của mô đun cùng với cú pháp nhóm). Một cài đặt cơ bản của các mô-đun sau đó được thực hiện thông qua

perl Makefile.PL 
make 
make test 
make install 

(về mặt kỹ thuật, make test là không bắt buộc, nhưng nó rất khuyến khích).

Bây giờ, nếu các mô-đun dựa trên module CPAN khác, sau đó bạn có thể sử dụng các mô-đun CPAN để cài đặt chúng, ví dụ:

use strict; 
use warnings; 
use CPAN; 

#populate however you'd like, either hard-coded, read from a file, etc. 
my @modules_to_install=(); 

foreach(@modules_to_install) 
{ 
    CPAN::Shell->install($_); 
} 

Vì vậy, bạn có thể phân phối một zip/tarball/etc với các thư mục và các tệp mà module-starter bắt đầu (và bạn đã sửa đổi) cùng với tập lệnh ở trên để cài đặt bất kỳ phụ thuộc CPAN nào và gọi nó là: cpan_install.pl. Nếu bạn muốn, sau đó bạn có thể bọc tất cả mọi thứ trong một kịch bản cuối cùng được gọi là, nói rằng, install.pl mà làm tất cả những điều này.

+0

Có thể, vấn đề chính của tôi ở đây là làm cách nào và ở đâu tôi có thể xác định vị trí của tập lệnh của mình? Tất cả tập lệnh của tôi đều dưới /bin và .pm của tôi dưới /bin/lib –

+2

Vâng, đối với mỗi mô-đun (và cho bản phân phối, nếu bạn sử dụng tùy chọn '--distro'),' module-starter' bao gồm ' Các thư mục lib' và 't', cùng với một số bản mẫu khác mà bạn hầu như có thể bỏ qua. Một khi các module được cài đặt (thông qua 'perl Makefile.PL; make; make test; make install'), sau đó chúng được cài đặt vào thư mục con' site_perl' của bất kỳ phân phối Perl nào bạn đang sử dụng. –

+8

Downvote cho [gọi CPAN mình để cài đặt các mô-đun còn thiếu] (http://stackoverflow.com/q/8183293). Thay vào đó, hãy khai báo các phụ thuộc với ['PREREQ_PM'] (https://metacpan.org/module/ExtUtils::MakeMaker#PREREQ_PM) để chúng kết thúc trong tệp meta distro, cũng xem các ví dụ trong http://stackoverflow.com/ a/7664993 và http://stackoverflow.com/a/2606677. – daxim

2

Phương pháp thông thường của tôi những ngày này chỉ đơn giản là sao chép tệp Build.PL từ một trong các bản phân phối hiện có của tôi và chuyển từ đó. Rõ ràng đó không phải là chiến lược hữu ích cho chiến dịch đầu tiên, nhưng CPAN có đầy đủ hàng nghìn tệp này.

Đối với một đơn giản, .pm tệp phân phối thuần túy, có lẽ dễ nhất để bắt đầu bằng cách sao chép tệp Build.PL của người khác và chỉnh sửa các trường phù hợp với trường hợp của bạn. Có khả năng tất cả những gì bạn cần thay đổi là các trường module_namerequires.

Dưới đây là một đơn giản một trong những mỏ bạn có thể ăn cắp^W được truyền cảm hứng bởi:

use strict; 
use warnings; 

use Module::Build; 

my $build = Module::Build->new(
    module_name => 'Your::Name::Here', 
    requires => { 
     'Your::Requirements::Here' => '1.23', 
    }, 
    build_requires => { 
     'Test::More' => 0, 
    }, 
    license => 'perl', 
    create_makefile_pl => 'traditional', 
    create_license => 1, 
    create_readme => 1, 
); 

$build->create_build_script; 

Những lĩnh vực, theo thứ tự, có nghĩa là:

  • Tên của module chính trong việc phân phối - đây là nơi tên của bản thân phân phối được lấy từ, cũng như phiên bản và tóm tắt trừu tượng của nó
  • Các mô-đun khác mà phân phối này sẽ phụ thuộc vào để xây dựng hoặc chạy
  • module khác có phân phối này sẽ phụ thuộc vào để xây dựng, nhưng sẽ không được yêu cầu sau khi cài đặt (thường đây sẽ là Test:: module hoặc các công cụ xây dựng khác)
  • Các điều khoản cấp phép áp dụng cho các phân phối
  • Tạo một di sản Makefile.PL cho khách hàng CPAN cũ mà không hiểu được Build.PL giao thức
  • Tạo một file LICENSE tự động từ các điều khoản cấp phép khai báo bên trên
  • Tạo một file README tự động bằng cách chuyển tài liệu POD module chính của thành rõ