EXE คือ ไฟล์ Binary ในระบบปฎิบัติการ Windows ที่ใช้งานกันส่วนใหญ่ ซึ่งได้แปลงโปรแกรมมาอยู่ในรูปภาษาเครื่องแล้วครับ
ใน Python 3 ผมได้ตรวจสอบแล้วพบว่า PyInstaller และอื่น ๆ ยังไม่รองรับ Python 3 อย่างสมบูรณ์ครับ ผมขอแนะนำโมดูล cx_Freeze ครับ เป็นโมดูลที่รองรับการ Compile python 3 ให้เป็น exe ครับ
โมดูล cx_Freeze สามารถโหลดและติดตั้งได้ที่ https://pypi.python.org/pypi/cx_Freeze ครับ เลือกให้ตรงกับเวชั่นนะครับ เช่น ผมใช้ Python 3.4 32 Bit ผมก็เลือก cx_Freeze-4.3.3.win32-py3.4.exe ครับ
เมื่อติดตั้งเสร็จแล้วเรามาลอง Compile python 3 ให้เป็น exe กันเลยครับ ผมได้เขียนโปรแกรมบวกลบแบบง่าย ๆ โดยมีโค้ดดังนี้ครับ
#!/usr/bin/python #-*-coding: utf-8 -*- print (" + or -") print ("1.+ 2. -") x = int(input("input: ")) if x == 1: a = int(input(" input 1: ")) b = int(input("input 2: ")) print ("=" , a + b) elif x == 2: c = int(input("input 1: ")) d = int(input("input 2: ")) print ("=" , c - d) elif x < 1 or x > 2: print ("No!") input("enter to exit")เสร็จแล้วผมบันทึกเป็น 1.py ต่อมาเราต้องสร้างไฟล์ setup.py ด้วยครับ เป็นไฟล์สำคัญในการ Compile บอกรายละอียดให้โมดูล cx_Freeze ว่าต้องมีการรวมโมดูลใดเข้ามาบ้าง ไฟล์ที่ต้องการ Compile เป็นต้นครับ
โค้ดตัวอย่างไฟล์ setup.py
import sys from cx_Freeze import setup, Executable executables = [ Executable("1.py", icon="logo.ico", appendScriptToExe=True, appendScriptToLibrary=False, ) ] buildOptions = dict(create_shared_zip=False) setup(name="Test", version="0.1", description="Hello, world", options=dict(build_exe=buildOptions), executables=executables, )
แล้วผมก็เปิด cmd ใช้ cd ไปยังโฟลเดอร์ที่เก็บแล้วผมก็สั่ง
python setup.py buildเสร็จแล้วจะได้โฟลเดอร์ build ขึ้นมา เข้าไปจะพบกับโฟลเดอร์ exe.winXX-Y.Y
XX คือ Bit ของ Python Y.Y คือรุ่นของ Python ครับ ของผมเป็น exe.win32-3.4 พอคลิกเข้าไปจะพบกับ ครับ เมื่อผมคลิกที่ 1.exe จะพบว่าโปรแกรมได้ถูก Compile ให้เป็น exe แล้วครับ
โหลดโค้ดตัวอย่างโปรแกรมที่ผ่านการ Compile ได้ที่ https://db.tt/kmIfSNPn
หรือถ้าต้องการสร้างไฟล์ติดตั้ง msi ด้วยให้ใช้คำสั่ง
python setup.py bdist_msiครับ จะได้โฟลเดอร์ dist ขึ้นมาข้างในจะมีไฟล์ Test-0.1-win32.msi ครับ
ติดตามบทความต่อไปครับ :)
ขอบคุณครับ
0 ความคิดเห็น:
แสดงความคิดเห็น
แสดงความคิดเห็นได้ครับ :)