สร้างไฟล์ปฏิบัติการเดียวจากโครงการ Python


87

ฉันต้องการสร้างไฟล์ปฏิบัติการเดียวจากโครงการ Python ของฉัน ผู้ใช้ควรจะดาวน์โหลดและเรียกใช้งานได้โดยไม่ต้องติดตั้ง Python ถ้าฉันแค่แจกจ่ายแพ็คเกจฉันสามารถใช้ pip วงล้อและ PyPI เพื่อสร้างและแจกจ่ายได้ แต่สิ่งนี้ต้องการให้ผู้ใช้มี Python และรู้วิธีติดตั้งแพ็คเกจ ฉันสามารถใช้อะไรเพื่อสร้างไฟล์ปฏิบัติการในตัวจากโปรเจ็กต์ Python


ฉันยังคงเขียนเป็น 2.x (2.7.2 ให้ถูกต้อง) แต่อาจเห็นว่าจำเป็นต้องโอนไปยัง 3.x (หากโมดูลและสิ่งนั้นเข้ากันได้) และจะต้องมีวิธีแก้ไขด้วย
ShadowFlame

โปรดทราบว่าบรรจุภัณฑ์จะทำให้การวินิจฉัยปัญหามีความซับซ้อนมาก ไม่เพียง แต่คุณเท่านั้น (หรือpdb) ไม่สามารถเข้าถึงไฟล์ที่กำลังดำเนินการได้โดยง่ายpy2exe(ไม่รู้เกี่ยวกับไฟล์อื่น ๆ ) จะไม่รวม.pyไฟล์ดังนั้นคุณจะไม่เห็นซอร์สไลน์ในสแต็กเทรซ
ivan_pozdeev

เพื่อเป็นจุดสนใจฉันเริ่มใช้ pyinstaller
ShadowFlame

คำตอบ:


115

นี่คือบางส่วนที่พบบ่อย โครงการทั้งหมดในรายการด้านล่างนี้จะได้รับการดูแลอย่างแข็งขันตั้งแต่การแก้ไขครั้งล่าสุดของฉัน (มกราคม 2020) เว้นแต่จะระบุไว้อย่างชัดเจน

ฉันได้รวมลิงค์ไปยังเว็บไซต์ repos และรายชื่อ PyPi ที่เกี่ยวข้องไว้ด้วยในกรณีที่คุณต้องการตรวจสอบด้วยตัวเองว่ามีการอัปเดตบ่อยเพียงใด

นอกจากนี้หากไม่ระบุไว้เป็นอย่างอื่นโปรแกรมทั้งหมดที่ระบุไว้ด้านล่างจะสร้าง exe โดยเฉพาะสำหรับระบบปฏิบัติการที่กำลังทำงานอยู่ตัวอย่างเช่นการเรียกใช้ Pyinstaller ใน Windows จะสร้าง exe ของ Windows แต่การเรียกใช้ Pyinstaller ใน Linux จะสร้าง exe ของ Linux หากคุณต้องการที่จะผลิต exe สำหรับระบบปฏิบัติการหลายระบบคุณจะต้องมองในการใช้เครื่องเสมือนหรือลักษณะในการใช้สิ่งที่ชอบไวน์


โปรแกรมต่อไปนี้ทำงานในลักษณะเดียวกัน - รวม Python และโปรแกรมของคุณเข้าด้วยกันโดยรวมเข้าด้วยกันอย่างมีประสิทธิภาพเพื่อสร้างไฟล์ปฏิบัติการ

  • PyInstaller:

  • cx_Freeze:

  • py2app:

    • ลิงค์: เว็บไซต์ || Repo || PyPi
    • รองรับ: Python 2.7 และ 3.3 (?) - 3.7 (?) บน Mac เท่านั้น
    • หมายเหตุ:ในการแก้ไขครั้งล่าสุดของฉันฉันไม่สามารถสรุปช่วงที่แน่นอนของเวอร์ชัน Python ที่ pyapp สนับสนุนได้ รุ่นล่าสุดกล่าวถึงการสนับสนุน Python 3.7

หมายเหตุ:เวอร์ชันก่อนหน้าของโพสต์นี้รวมการเขียนสำหรับpy2exe ( repo ) และbbfreeze ( repo ) ทั้งสองโครงการถูกลบออกจากรายการนี้: พวกเขาเห็นกิจกรรมเล็ก ๆ น้อย ๆ มาหลายปีแล้วและดูเหมือนจะไม่ได้รับการดูแลอย่างสมบูรณ์ ดูประวัติการแก้ไขสำหรับการเขียนเก่า


แน่นอนว่านั่นไม่ใช่วิธีเดียวในการทำสิ่งต่างๆ:

  • pynsist:

    • ลิงค์: เว็บไซต์ || Repo || PyPi
    • รองรับ: Python ทุกรุ่น? หมายเหตุ - จะสร้างโปรแกรมติดตั้ง Windowsเท่านั้น
    • หมายเหตุอื่น ๆ : Pynsist ดูเหมือนจะสนับสนุนการรวม Python เวอร์ชันใด ๆ เข้าด้วยกันกับแอปพลิเคชันของคุณ อย่างไรก็ตามเครื่องมือนี้ต้องใช้ Python 3.5+ เพื่อให้ทำงานได้

      Pynsist จะสร้างตัวติดตั้ง Windows สำหรับโปรแกรมของคุณซึ่งจะติดตั้ง Python บนคอมพิวเตอร์ของผู้ใช้โดยตรงแทนที่จะรวมเข้ากับโค้ดของคุณและสร้างทางลัดที่เชื่อมโยงไปยังสคริปต์ Python ของคุณ แม้ว่าโปรแกรมนี้จะสร้างเฉพาะโปรแกรมติดตั้ง Windows แต่ดูเหมือนว่าคุณยังสามารถเรียกใช้ Pynsistบนคอมพิวเตอร์ Mac และ Linux ได้

  • Nuitka:

    • ลิงค์: เว็บไซต์ || Repo (กระจก Github) || PyPi
    • รองรับ: Python 2.6 - 2.7 และ Python 3.3 - 3.7 บน Windows, Mac และ Linux
    • หมายเหตุอื่น ๆ : Nuitka จะรวบรวมโค้ด Python ของคุณอย่างแท้จริงและสร้าง exe (ตรงข้ามกับโปรเจ็กต์อื่น ๆ ซึ่งรวมถึง Python ด้วย) เพื่อพยายามเร่งความเร็วโค้ดของคุณ ผลข้างเคียงคุณจะได้รับ exe ที่มีประโยชน์ซึ่งคุณสามารถแจกจ่ายได้ โปรดทราบว่าคุณต้องมีคอมไพเลอร์ C ++ในระบบของคุณ
  • cython:

    • ลิงค์: เว็บไซต์ || Repo || PyPi
    • รองรับ: Python 2.6 - 2.7 และ Python 3.2 - 3.8 บน Windows, Mac และ Linux
    • หมายเหตุอื่น ๆ : Cython คล้ายกับ Nuitka ตรงที่เป็นคอมไพเลอร์ Python อย่างไรก็ตามแทนที่จะรวบรวมรหัสของคุณโดยตรงมันจะรวบรวมเป็น C จากนั้นคุณสามารถใช้รหัส C นั้นและเปลี่ยนรหัสของคุณให้เป็น exeได้ คุณจะต้องมีคอมไพเลอร์ C ในระบบของคุณ

ความชอบส่วนตัวของฉันคือการใช้ PyInstaller เนื่องจากเป็นวิธีที่ง่ายที่สุดสำหรับฉันในการเริ่มต้นใช้งานได้รับการออกแบบมาเพื่อทำงานร่วมกับไลบรารียอดนิยมต่างๆเช่น numpy หรือ pygame และเข้ากันได้ดีกับ OSes และ Python เวอร์ชันต่างๆ

อย่างไรก็ตามฉันยังสร้าง exes ต่างๆโดยใช้ cx_Freeze ได้สำเร็จโดยไม่มีปัญหามากเกินไปดังนั้นคุณควรลองใช้โปรแกรมนั้นด้วย

ฉันยังไม่มีโอกาสลอง pynist, Nuitka หรือ Cython อย่างกว้างขวาง แต่ดูเหมือนว่าจะเป็นโซลูชันที่น่าสนใจและเป็นนวัตกรรมใหม่ หากคุณประสบปัญหาในการใช้โปรแกรมกลุ่มแรกอาจคุ้มค่าที่จะลองใช้หนึ่งในสามโปรแกรมนี้ เนื่องจากโปรแกรมเหล่านี้ทำงานแตกต่างกันโดยพื้นฐานแล้วโปรแกรมสไตล์ Pyinstaller / cx_freeze พวกเขาอาจประสบความสำเร็จในกรณีขอบแปลก ๆ ที่กลุ่มแรกล้มเหลว

โดยเฉพาะอย่างยิ่งฉันคิดว่า pynist เป็นวิธีที่ดีในการหลีกเลี่ยงปัญหาทั้งหมดในการแจกจ่ายโค้ดของคุณโดยสิ้นเชิง: Macs และ Linux มีการรองรับ Python ดั้งเดิมอยู่แล้วและการติดตั้ง Python บน Windows อาจเป็นวิธีที่สะอาดที่สุดอย่างแท้จริง (ข้อเสียคือตอนนี้คุณต้องกังวลเกี่ยวกับการกำหนดเป้าหมายหลายเวอร์ชันของ Python + การติดตั้งไลบรารี)

Nuitka และ Cython (ในประสบการณ์ที่ จำกัด ของฉัน) ดูเหมือนจะทำงานได้ดีพอสมควร อีกครั้งฉันไม่ได้ทดสอบพวกเขาอย่างกว้างขวางด้วยตัวเองดังนั้นข้อสังเกตหลักของฉันคือพวกเขาดูเหมือนจะใช้เวลานานกว่ามากในการสร้าง exe จากนั้นโปรแกรมสไตล์ "หยุด" จะทำ


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


1
โปรดทราบว่าคุณต้องรวมMicrosoft C ++ Redistributablesไว้ในบันเดิลของคุณ(หรือที่เรียกmsvcrxx.dllว่าxxหมายเลขเวอร์ชัน) เพื่อให้. exe ทำงาน (หรือขอให้ผู้ใช้ติดตั้งด้วยตัวเอง) สิ่งนี้จำเป็นเนื่องจาก Python สร้างขึ้นบน Windows โดยใช้ Visual Studio
พูดไม่ออก

ดังนั้นดูเหมือนว่าไม่มี python IDE (pycharm หรือ pydev - eclipse pluggin) ใดที่ยังไม่ได้รวมฟังก์ชันการคอมไพล์ต่อเดียวที่เรียกใช้งานได้ใน IDE เอง ถูกต้องหรือไม่ :-)
Nelda.techspiress

หากคุณใส่ใจในการรักษาซอร์สโค้ดของคุณให้ปลอดภัย Cython อาจเป็นตัวเลือกที่ดีที่สุดเพราะรวบรวมรหัส C โปรแกรมที่ใช้เทคนิคการแช่แข็งโดยทั่วไปสามารถถอดรหัสได้อย่างง่ายดาย
Martín De la Fuente

PyInstaller อยู่ในรายการข้างต้นว่ารองรับ Python 3.7 ไม่เป็นความจริงตามประสบการณ์ของฉันและตามคำอธิบายใน pyinstaller.org ซึ่งระบุว่า "PyInstaller ทำงานร่วมกับ Python 2.7 และ 3.3—3.6"
ทอม

1
@Tom - หลังจากทำการขุดเพิ่มเติมเล็กน้อยดูเหมือนว่าในขณะที่ pyinstaller เองรองรับ Python 3.7 แต่พวกเขายังไม่ได้เปิดตัวเวอร์ชันใหม่อย่างเป็นทางการที่รองรับ 3.7 (เช่นgithub repoของพวกเขาระบุว่าพวกเขารองรับ Python 3.7 + ดูเหมือนว่าจะไม่มีปัญหาที่เปิดค้างไว้ที่เกี่ยวข้องกับ 3.7 แต่ pyinstaller เวอร์ชันล่าสุดบน PyPi มาจากธันวาคม 2017) ดังนั้นหากคุณต้องการการสนับสนุน 3.7 คุณสามารถลองสร้าง + ติดตั้ง pyinstaller โดยตรงจากแหล่งที่มาหรือรอจนถึงรุ่นถัดไป (หรือใช้โปรแกรมอื่นแน่นอน)
Michael0x2a

10

pyinstallerยังอยู่ระหว่างการพัฒนา คุณสามารถดูการเปลี่ยนแปลงล่าสุดบน GitHub

รองรับแพลตฟอร์มหลักทั้งสาม:

  • Windows (32 บิตและ 64 บิต)
  • Linux (32 บิตและ 64 บิต)
  • Mac OS X (32 บิตและ 64 บิต)

และรองรับ Python เวอร์ชัน 2.6 และ 2.7 ไม่รองรับ Python 3 แต่มีสาขา Python 3ทดลองอยู่

อัปเดต

ในเวอร์ชัน 3.2.1 รองรับ Python 2.7, 3.3-3.5


2

ใช้งานได้ดีกว่าpip install auto-py-to-exeซึ่งให้ UI ที่สวยงามพร้อมตัวเลือกทั้งหมดที่จำเป็นในการสร้างไฟล์ปฏิบัติการ

หลังจากติดตั้งแล้วให้พิมพ์auto-py-to-exeเทอร์มินัลหรือพร้อมรับคำสั่ง

อัตโนมัติ py-to-exe


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