Trứng Python là gì?


532

Tôi mới sử dụng Python và tôi đang cố gắng hiểu cách các gói của nó hoạt động. Có lẽ "trứng" là một số loại cơ chế đóng gói, nhưng cái gì là một cái nhìn tổng quan nhanh về vai trò của chúng và có thể là một số thông tin về lý do tại sao chúng hữu ích và làm thế nào để tạo ra chúng?

Câu trả lời:


527

Lưu ý: Bao bì trứng đã được thay thế bằng bao bì Bánh xe.

Cùng một khái niệm như một .jartệp trong Java, nó là một .ziptệp có một số tệp siêu dữ liệu được đổi tên .egg, để phân phối mã dưới dạng các gói.

Cụ thể: Cấu trúc bên trong của trứng Python

"Trứng Python" là một cấu trúc logic thể hiện việc phát hành một phiên bản cụ thể của dự án Python, bao gồm mã, tài nguyên và siêu dữ liệu của nó. Có nhiều định dạng có thể được sử dụng để mã hóa vật lý một quả trứng Python và những định dạng khác có thể được phát triển. Tuy nhiên, một nguyên tắc quan trọng của trứng Python là chúng có thể được khám phá và nhập khẩu. Đó là, ứng dụng Python có thể dễ dàng và hiệu quả trong việc tìm ra những quả trứng nào có trên hệ thống và để đảm bảo rằng nội dung của những quả trứng mong muốn có thể nhập được.

Các .eggđịnh dạng được rất phù hợp để phân phối và gỡ bỏ dễ dàng hoặc nâng cấp mã, kể từ khi dự án về cơ bản là tự chứa trong một thư mục duy nhất hoặc tập tin, unmingled với mã nguồn hoặc bất kỳ dự án khác. Nó cũng cho phép cài đặt đồng thời nhiều phiên bản của một dự án, sao cho các chương trình riêng lẻ có thể chọn các phiên bản mà chúng muốn sử dụng.


82

Các .eggtập tin là một định dạng phân phối đối với các gói Python. Nó chỉ là một thay thế cho một phân phối mã nguồn hoặc Windows exe. Nhưng lưu ý rằng đối với thuần Python, .eggtệp hoàn toàn đa nền tảng.

Các .eggtập tin chính nó là một .ziptập tin. Nếu bạn thay đổi tiện ích mở rộng thành siêu thị zip, bạn có thể thấy rằng nó sẽ có các thư mục bên trong kho lưu trữ.

Ngoài ra, nếu bạn có một .eggtập tin, bạn có thể cài đặt nó dưới dạng một gói bằng cách sử dụngeasy_install

Ví dụ: Để tạo một .eggtệp cho một thư mục cho biết mymathchính nó có thể có một số tập lệnh python, hãy thực hiện bước sau:

# setup.py
from setuptools import setup, find_packages
setup(
    name = "mymath",
    version = "0.1",
    packages = find_packages()
    )

Sau đó, từ thiết bị đầu cuối làm:

 $ python setup.py bdist_egg

Điều này sẽ tạo ra rất nhiều kết quả đầu ra, nhưng khi hoàn thành, bạn sẽ thấy rằng bạn có ba thư mục mới: build , distmymath.egg-information . Thư mục duy nhất mà chúng tôi quan tâm là thư mục dist nơi bạn sẽ tìm thấy .eggtệp của mình , mymath-0.1-py3.5.eggvới số phiên bản python (cài đặt) mặc định của bạn (của tôi ở đây: 3.5)

Nguồn: blog thư viện Python


3

Trứng Python là cách kết hợp thông tin bổ sung với dự án Python, cho phép kiểm tra và thỏa mãn các phụ thuộc của dự án trong thời gian chạy, cũng như cho phép các dự án cung cấp bổ trợ cho các dự án khác. Có một số định dạng nhị phân thể hiện trứng, nhưng phổ biến nhất là định dạng zipf '.egg', vì đó là định dạng thuận tiện để phân phối dự án. Tất cả các định dạng hỗ trợ bao gồm dữ liệu dành riêng cho gói, siêu dữ liệu trong toàn dự án, phần mở rộng C và mã Python.

Cách dễ nhất để cài đặt và sử dụng trứng Python là sử dụng trình quản lý gói Python "Easy Install", sẽ tìm, tải xuống, xây dựng và cài đặt trứng cho bạn; tất cả những gì bạn làm là cho nó biết tên (và tùy chọn, phiên bản) của (các) dự án Python mà bạn muốn sử dụng.

Trứng Python có thể được sử dụng với Python 2.3 trở lên và có thể được xây dựng bằng gói setuptools (xem hộp cát Python Subversion để biết mã nguồn hoặc trang EasyInstall để biết hướng dẫn cài đặt hiện tại).

Những lợi ích chính của Trứng Python là:

  • Chúng kích hoạt các công cụ như trình quản lý gói Python "Easy Install"

  • Các tệp .egg là định dạng "không cài đặt" cho gói Python; không yêu cầu bước xây dựng hoặc cài đặt, chỉ cần đặt chúng trên PYTHONPATH hoặc sys.path và sử dụng chúng (có thể yêu cầu thời gian chạy được cài đặt nếu sử dụng phần mở rộng C hoặc tệp dữ liệu)

  • Chúng có thể bao gồm siêu dữ liệu gói, chẳng hạn như những quả trứng khác mà chúng phụ thuộc vào

  • Chúng cho phép "các gói không gian tên" (các gói chỉ chứa các gói khác) được phân chia thành các bản phân phối riêng biệt (ví dụ: zope. , Twist. , Peak. * Các gói có thể được phân phối dưới dạng trứng riêng biệt, không giống như các gói thông thường phải luôn được đặt dưới cùng thư mục mẹ. Điều này cho phép các gói nguyên khối khổng lồ hiện được phân phối thành các thành phần riêng biệt.)

  • Chúng cho phép các ứng dụng hoặc thư viện chỉ định phiên bản cần thiết của thư viện, do đó bạn có thể yêu cầu ("Twisted-Internet> = 2.0") trước khi thực hiện nhập xoắn.

  • Chúng là một định dạng tuyệt vời để phân phối các tiện ích mở rộng hoặc plugin cho các ứng dụng và khung mở rộng (như Trac, sử dụng trứng cho các plugin từ 0,9b1), vì thời gian chạy trứng cung cấp API đơn giản để xác định vị trí trứng và tìm điểm nhập cảnh được quảng cáo của chúng (tương tự theo khái niệm "điểm mở rộng" của Eclipse).

Ngoài ra còn có các lợi ích khác có thể đến từ việc có định dạng chuẩn, tương tự như lợi ích của định dạng "jar" của Java.


trứng trăn là một phiên bản cụ thể? tức là trứng được xây dựng cho 2 vs 3? hoặc thậm chí các phiên bản nhỏ? ex 2.x
ealeon

1

"Egg" là định dạng phân phối có thể nhập một tệp cho các dự án liên quan đến Python.

"Hướng dẫn nhanh về Trứng Python" lưu ý rằng "Trứng là của Pythons vì các lọ là Java ..."

Trứng thực sự phong phú hơn lọ; họ nắm giữ siêu dữ liệu thú vị như chi tiết cấp phép, phụ thuộc phát hành, v.v.


Các liên kết đã chết như ngày hôm nay.
Perfi

@Perfi Link hoạt động với tôi.
Klik

Hài hước làm thế nào đôi khi nó hoạt động! Nó đã trở lại trực tuyến. Vui mừng khi thấy nó :)
Perfi
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.