ไข่หลามคืออะไร


531

ฉันยังใหม่กับ Python และฉันแค่พยายามเข้าใจว่าแพ็คเกจทำงานอย่างไร สันนิษฐานว่า "ไข่" เป็นกลไกการบรรจุภัณฑ์บางอย่าง แต่สิ่งที่จะเป็นภาพรวมอย่างรวดเร็วของสิ่งที่พวกเขาเล่นบทบาทและอาจมีข้อมูลบางอย่างเกี่ยวกับสาเหตุที่พวกเขามีประโยชน์และวิธีการสร้างพวกเขา?

คำตอบ:


527

หมายเหตุ: บรรจุภัณฑ์ไข่ได้รับการแทนที่โดยบรรจุภัณฑ์ล้อ

แนวคิดเดียวกับ.jarไฟล์ใน Java เป็น.zipไฟล์ที่มีไฟล์ metadata บางไฟล์ถูกเปลี่ยนชื่อ.eggเพื่อแจกจ่ายรหัสเป็นชุดข้อมูล

โดยเฉพาะ: โครงสร้างภายในของไข่หลาม

"Python egg" เป็นโครงสร้างเชิงตรรกะที่รวมการเปิดตัวของโครงการ Python เฉพาะรุ่นซึ่งประกอบด้วยรหัสทรัพยากรและข้อมูลเมตาของมัน มีหลายรูปแบบที่สามารถใช้ในการเข้ารหัสไข่ Python และอื่น ๆ สามารถพัฒนาได้ อย่างไรก็ตามหลักการสำคัญของไข่หลามก็คือพวกมันควรจะค้นพบและนำเข้าได้ นั่นคือมันเป็นไปได้ที่แอปพลิเคชั่น Python จะสามารถค้นหาไข่ที่อยู่ในระบบได้อย่างง่ายดายและมีประสิทธิภาพและเพื่อให้แน่ใจว่าเนื้อหาของไข่ที่ต้องการนั้นสามารถนำเข้าได้

.eggรูปแบบเป็นอย่างดีเหมาะกับการจัดจำหน่ายและการถอนการติดตั้งง่ายหรือการอัพเกรดของรหัสเนื่องจากโครงการเป็นหลักตัวเองที่มีอยู่ภายในไดเรกทอรีเดียวหรือแฟ้ม unmingled ด้วยรหัสโครงการอื่น ๆ หรือทรัพยากร นอกจากนี้ยังทำให้สามารถติดตั้งโปรเจ็กต์หลายเวอร์ชันพร้อมกันได้เช่นกันแต่ละโปรแกรมสามารถเลือกเวอร์ชันที่ต้องการใช้


82

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

.eggไฟล์ตัวเองเป็นหลัก.zipไฟล์ หากคุณเปลี่ยนนามสกุลเป็น " zip" คุณจะเห็นว่ามันจะมีโฟลเดอร์อยู่ในไฟล์เก็บถาวร

นอกจากนี้หากคุณมี.eggไฟล์คุณสามารถติดตั้งเป็นแพ็คเกจโดยใช้easy_install

ตัวอย่าง: ในการสร้าง.eggไฟล์สำหรับไดเรกทอรีบอกว่าmymathตัวเองอาจมีสคริปต์หลามหลายตัวให้ทำตามขั้นตอนต่อไปนี้:

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

จากนั้นทำจาก terminal:

 $ python setup.py bdist_egg

นี้จะสร้างจำนวนมากของผล แต่เมื่อมันเสร็จคุณจะเห็นว่าคุณมีสามโฟลเดอร์ใหม่: สร้าง , และmymath.egg-info โฟลเดอร์เดียวที่เราใส่ใจคือโฟลเดอร์distที่คุณจะพบ.eggไฟล์mymath-0.1-py3.5.eggของคุณพร้อมกับหมายเลขเวอร์ชั่นของไพ ธ อน (ติดตั้ง) (ที่นี่: 3.5)

ที่มา: บล็อกไลบรารี Python


3

Python Egg เป็นวิธีการรวมข้อมูลเพิ่มเติมเข้ากับโครงการ Python ที่ช่วยให้สามารถตรวจสอบและพึงพอใจของการพึ่งพาของโครงการที่รันไทม์รวมถึงการอนุญาตให้โครงการจัดหาปลั๊กอินสำหรับโครงการอื่น ๆ มีรูปแบบไบนารี่หลายรูปแบบที่รวบรวมไข่ แต่ที่พบมากที่สุดคือรูปแบบ zipfile '.egg' เนื่องจากเป็นรูปแบบที่สะดวกสำหรับการกระจายโครงการ รูปแบบทั้งหมดสนับสนุนรวมถึงข้อมูลเฉพาะแพ็คเกจข้อมูลเมตาของโครงการส่วนขยาย C และรหัส Python

วิธีที่ง่ายที่สุดในการติดตั้งและใช้ไข่ Python คือการใช้ตัวจัดการแพ็คเกจ Python "Easy Install" ซึ่งจะค้นหาดาวน์โหลดสร้างและติดตั้งไข่ให้คุณ สิ่งที่คุณทำคือบอกชื่อ (และเป็นทางเลือกเวอร์ชัน) ของโครงการ Python ที่คุณต้องการใช้

สามารถใช้ไข่ Python กับ Python 2.3 ขึ้นไปและสามารถสร้างได้โดยใช้แพ็คเกจ setuptools (ดูที่ Sandbox การโค่นล้ม Python สำหรับซอร์สโค้ดหรือหน้า EasyInstall สำหรับคำแนะนำในการติดตั้งปัจจุบัน)

ประโยชน์หลักของ Python Eggs คือ:

  • พวกเขาเปิดใช้งานเครื่องมือเช่นตัวจัดการแพ็คเกจ Python "Easy Install"

  • ไฟล์ .egg เป็นรูปแบบ "ศูนย์การติดตั้ง" สำหรับแพ็คเกจ Python ไม่จำเป็นต้องสร้างหรือติดตั้งขั้นตอนเพียงวางไว้บน PYTHONPATH หรือ sys.path และใช้พวกเขา (อาจต้องติดตั้งรันไทม์หากใช้นามสกุล C หรือไฟล์ข้อมูล)

  • พวกเขาสามารถรวมข้อมูลเมตาแพคเกจเช่นไข่อื่น ๆ ที่พวกเขาขึ้นอยู่กับ

  • อนุญาตให้ "แพ็คเกจเนมสเปซ" (แพ็คเกจที่มีเพียงแพ็คเกจอื่น ๆ ) สามารถแบ่งเป็นดิสทริบิวชันที่แยกต่างหาก (เช่น zope. , twisted. , peak. * แพคเกจสามารถแจกจ่ายเป็นไข่แยกต่างหากซึ่งแตกต่างจากแพ็คเกจปกติ พาเรนต์ไดเร็กทอรีซึ่งอนุญาตให้แจกจ่ายแพคเกจเสาหินขนาดใหญ่ตอนนี้เป็นส่วนประกอบแยกต่างหาก)

  • อนุญาตให้แอปพลิเคชันหรือไลบรารีระบุรุ่นที่ต้องการของไลบรารีเพื่อให้คุณสามารถต้องการ ("Twisted-Internet> = 2.0") ก่อนที่จะทำการอิมพอร์ต twisted.internet

  • เป็นรูปแบบที่ยอดเยี่ยมสำหรับการกระจายส่วนขยายหรือปลั๊กอินไปยังแอพพลิเคชั่นและเฟรมเวิร์กที่ขยายได้ (เช่น Trac ซึ่งใช้ egg สำหรับปลั๊กอินตั้งแต่ 0.9b1) เนื่องจาก runtime runtime มี API ง่าย ๆ ในการค้นหาไข่และค้นหาจุดเริ่มต้นโฆษณา สู่แนวคิด "จุดส่วนขยาย" ของ Eclipse)

นอกจากนี้ยังมีประโยชน์อื่น ๆ ที่อาจมาจากการมีรูปแบบที่ได้มาตรฐานเหมือนกับประโยชน์ของรูปแบบ "jar" ของ Java


หลามเป็นไข่เฉพาะรุ่นหรือไม่ เช่นไข่ที่สร้างขึ้นสำหรับ 2 vs 3? หรือแม้กระทั่งรุ่นรอง? เช่น 2.x
ealeon

1

"Egg" เป็นรูปแบบการแจกจ่ายที่สามารถนำเข้าไฟล์เดียวสำหรับโครงการที่เกี่ยวข้องกับ Python

"Quick Guide to Python Eggs"ตั้งข้อสังเกตว่า"Eggs to Pythons เป็น Jars to Java ... "

ที่จริงแล้วไข่นั้นอุดมสมบูรณ์กว่าไห พวกเขาเก็บข้อมูลเมตาที่น่าสนใจเช่นรายละเอียดสิทธิ์การใช้งานการอ้างอิงการปล่อย ฯลฯ


ลิงค์เสียชีวิตตั้งแต่วันนี้
Perfi

@Perfi Link ใช้งานได้สำหรับฉัน
คลิกที่

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