วิธีสร้างไฟล์ Python egg


93

ฉันมีคำถามเกี่ยวกับไฟล์ egg ใน Python

ฉันมีโค้ด Python มากมายที่จัดเรียงตามแพ็คเกจและฉันกำลังพยายามสร้างไฟล์ egg ฉันทำตามคำแนะนำแต่เป็นเรื่องธรรมดามาก

ตามนั้นดูเหมือนว่าฉันต้องมีไฟล์ setup.py

  1. คุณช่วยบอกฉันได้ไหมว่าฉันต้องใส่อะไรลงในไฟล์ setup.py และควรอยู่ที่ไหน
  2. ฉันคิดว่าเพียงพอที่จะสร้าง setup.py แล้วเริ่ม "setup.py bdist_egg" เพื่อรับไฟล์ egg คุณช่วยยืนยันได้ไหม
  3. เป็นไปได้ไหมที่จะรวมเฉพาะไฟล์. pyc ลงในไฟล์ egg
  4. มีไฟล์. egg ฉันจะเริ่มโค้ดจากมันโดยไม่ต้องคลายไฟล์ได้java -jar <jar file>อย่างไร?

ฉันควรใช้อะไรแทนไข่? นี่คือคำถามของฉันเกี่ยวกับไข่stackoverflow.com/questions/14902732/…
กรีน

@YauhenYakimovich: ลิงก์นั้นตอนนี้เป็นโดเมนสแปมที่พัก อาจจะคุ้มค่าที่จะแก้ไขเพื่อใช้packaging.python.org/en/latest/wheel_egg ?
Chris Adams

คำตอบ:


74

คุณกำลังอ่านเอกสารที่ไม่ถูกต้อง คุณต้องการสิ่งนี้: https://setuptools.readthedocs.io/en/latest/setuptools.html#develop-deploy-the-project-source-in-development-mode

  1. สร้าง setup.py จะครอบคลุมในเอกสาร distutils ในเอกสารห้องสมุดมาตรฐานของงูใหญ่ที่นี่ ความแตกต่างที่สำคัญ (สำหรับไข่งูเหลือม) คือคุณimport setupมาจากไหนsetuptoolsไม่ใช่distutils

  2. ใช่. นั่นน่าจะใช่

  3. ฉันไม่คิดอย่างนั้น pycไฟล์อาจขึ้นอยู่กับเวอร์ชันและแพลตฟอร์ม คุณอาจเปิดไข่ได้ (ควรเป็นไฟล์ zip) และลบ.pyไฟล์ออกจาก.pycไฟล์ แต่จะไม่แนะนำ

  4. ฉันไม่แน่ใจ. นั่นอาจเป็น“ โหมดการพัฒนา” หรือคุณกำลังมองหาโหมด“ py2exe” หรือ“ py2app” อยู่?


51
+1: อย่ารวมไฟล์. pyc พวกเขาสับสนโดยสิ้นเชิง เราคัดลอกไฟล์ windows .pyc ไปยังกล่อง linux โดยไม่ได้ตั้งใจและมีข้อความการตรวจสอบย้อนกลับที่สับสนที่สุดเท่าที่เคยมีมา เนื่องจากชื่อไฟล์ที่เป็นชื่อไฟล์ Windows ดั้งเดิม มันน่ากลัวมากที่เห็นชื่อไฟล์ windows เหล่านั้นบนเซิร์ฟเวอร์การผลิต
ล็อตต์

เพียงใช้ pyinstaller
Nickpick

30

สำหรับ # 4 สิ่งที่ใกล้เคียงที่สุดในการเริ่มต้น java ด้วยไฟล์ jar สำหรับแอปของคุณคือฟีเจอร์ใหม่ใน Python 2.6 ไฟล์ zip และไดเร็กทอรีที่ปฏิบัติการได้

python myapp.zip

โดย myapp.zip เป็นไฟล์ zip ที่มี__main__.pyไฟล์ที่เรียกใช้งานเป็นไฟล์สคริปต์ที่จะเรียกใช้งาน การอ้างอิงแพ็คเกจของคุณสามารถรวมอยู่ในไฟล์:

__main__.py
mypackage/__init__.py
mypackage/someliblibfile.py

คุณสามารถเรียกใช้ไข่ได้ แต่คาถาไม่ดีเท่า:

# Bourn Shell and derivatives (Linux/OSX/Unix)
PYTHONPATH=myapp.egg python -m myapp
rem Windows 
set PYTHONPATH=myapp.egg
python -m myapp

สิ่งนี้ทำให้ myapp.egg บนพา ธ Python และใช้อาร์กิวเมนต์ -m เพื่อเรียกใช้โมดูล myapp.egg ของคุณจะมีลักษณะดังนี้:

myapp/__init__.py
myapp/somelibfile.py

และ python จะทำงาน__init__.py(คุณควรตรวจสอบว่า__file__=='__main__'ในแอปของคุณใช้บรรทัดคำสั่ง)

ไฟล์ Egg เป็นเพียงไฟล์ zip ดังนั้นคุณอาจสามารถเพิ่มลง__main__.pyใน egg ของคุณด้วยเครื่องมือ zip และทำให้สามารถเรียกใช้งานได้ใน python 2.6 และเรียกใช้python myapp.eggแทนการสะกดข้างต้นที่ตั้งค่าตัวแปรสภาพแวดล้อม PYTHONPATH

ข้อมูลเพิ่มเติมเกี่ยวกับไฟล์ zip ที่ปฏิบัติการได้รวมถึงวิธีการทำให้สามารถเรียกใช้งานได้โดยตรงด้วยshebangสามารถพบได้ในบล็อกโพสต์ของ Michael Foord ในหัวข้อนี้


หรืออีกวิธีหนึ่งสามารถใช้ virtual environment guide.python-distribute.org/installation.html#upgrading
Yauhen Yakimovich

10

ฉันคิดว่าคุณควรใช้ล้อหลามในการแจกจ่ายแทนไข่ตอนนี้

ล้อเป็นมาตรฐานใหม่ของการกระจายงูหลามและมีจุดมุ่งหมายเพื่อแทนที่ไข่ มีการสนับสนุนใน pip> = 1.4 และ setuptools> = 0.8


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