5 พฤศจิกายน 2557

Published พฤศจิกายน 05, 2557 by with 0 comment

Compile python 3 ให้เป็น exe ด้วย py2exe

จากตอนที่แล้ว ผมได้พาผู้อ่านทุกท่านไป Compile python 3 ให้เป็น exe ด้วย cx_Freeze ตอนนั้น py2exe ยังไม่สนับสนุน Python 3 ครับ ในตอนนี้ py2exe ได้พัฒนามาถึงเวชั่น 0.9.2.2 ได้สนับสนุน Python 3 แล้วครับ ตั้งแต่ Python 3.3+ บทความนี้ผมจะพาทุกท่านไป Compile python ให้เป็น exe ด้วย py2exe กันครับ
  py2exe เป็นเครื่องมือสำหรับ Compile python ให้เป็น exe ที่มีชื่อเสียงมายาวนานและเป็นที่นิยมกันใน Python 2 รองรับการ Compile ทั้ง 32 bit และ 64 bit จาก Python scripts
  py2exe สามารถสร้าง console executables, windows (GUI) executables, windows services, และ DLL/EXE COM servers

การติดตั้ง

-ใช้ pip โดยใช้คำสั่ง
py -3.4 -m pip install py2exe
หรือ
pip install py2exe
-โหลดไฟล์ติดตั้ง ได้ที่ https://pypi.python.org/pypi/py2exe/

Compile python 3 ให้เป็น exe

ใช้คำสั่ง
py -3.4 -m py2exe.build_exe notesbook.py --bundle-files
อธิบาย
-3.4 คือ เวชั่นของ Python หากผู้อ่านใช้ Python 3.3 ให้เปลี่ยนเป็น -3.3
notesbook.py คือ ไฟล์ .py ที่ผมต้องการ Compile ผู้อ่านสามารถเปลี่ยนเป็นไฟล์ .py ที่ต้องการ Compile
โค้ดตัวอย่างไฟล์ notesbook.py
#!/usr/bin/python
#-*-coding: utf-8 -*-
print ("The program notesbook")
print ("Build by Wannaphong")
print ("What you do?")
print ("1.To write \n 2.Read")
x = int(input("input: "))

if x == 1:
    a = open('notes.txt','a+')
    ab = input("input: ")
    a.write(ab)
    print ("Ok, Text's:",ab)
    a.close
elif x == 2:
    a = open('notes.txt','r+')
    print (a.read())
    a.close


จะได้โฟลเดอร์ dist เพิ่มขึ้นในมาในโฟลเดอร์ที่เก็บไฟล์ notesbook.py โดยข้างในโฟลเดอร์ dist จะมีไฟล์ที่ต้องเป็นสำหรับใช้รันไฟล์ที่เรา Compile python ให้เป็น exe

ถ้าใช้คำสั่ง
py -3.4 -m py2exe.build_exe notesbook.py --bundle-files 2
ผลลัพธ์
 
จะเห็นได้ว่าไฟล์พวก .pyd ได้ถูกรวมมาอยู่กับไฟล์ notesbook.exe ทำให้ไฟล์ notesbook.exe มีขนาดเพิ่มขึ้น ที่แยกออกมาจะมีแค่ไฟล์ python34.dll

ถ้าใช้คำสั่ง
py -3.4 -m py2exe.build_exe notesbook.py --bundle-files 1
ผลลัพธ์
จะเห็นได้ว่าคราวนี้ระบบได้รวมไฟล์  python34.dll เข้ามารวมกับไฟล์ notesbook.exe แต่คำสั่งนี้ไฟล์ข้อมูล notes.txt เมื่อรันคำสั่งไฟล์ notes.txt ยังแยกออกจาก notesbook.exe อยู่

ในกรณีที่ผู้อ่านเขียนโปรแกรม Python โดยมีการดึงข้อมูลจากไฟล์ฐานข้อมูล sqlite หากต้องการรวมไฟล์ฐานข้อมูลเข้ากับไฟล์ที่ต้องการ Compile ให้ใช้คำสั่ง
py -3.4 -m py2exe.build_exe notesbook.py --bundle-files 0

เพียงแค่นี้เราก็จะได้ไฟล์ exe ที่ถูก Compile จาก python แล้วครับ
  นอกจากนั้นยังมีวิธีการขั้นสูงสำหรับกำหนดค่า โดยใช้ setup-script มีลักษณะการใช้งานเหมือน Python 2 ครับ
สร้างไฟล์ setup-script ขึ้นมา โค้ด:
from distutils.core import setup
import py2exe

setup(console=['notesbook.py'])

เสร็จแล้วบันทึกไฟล์ชื่อ setup.py ในโฟลเดอร์เดียวกันกับไฟล์  notesbook.py เสร็จแล้วใช้คำสั่ง
python 1.py py2exe
หน้าจอจะขึ้นแสดงการทำงานระหว่าง Compile
running py2exe

  3 missing Modules
  ------------------
? readline                            imported from cmd, code, pdb
? win32api                            imported from platform
? win32con                            imported from platform
Building 'dist\notesbook.exe'.
Building shared code archive 'dist\library.zip'.
Copy c:\windows\system32\python34.dll to dist
Copy C:\Python34\DLLs\unicodedata.pyd to dist\unicodedata.pyd
Copy C:\Python34\DLLs\_bz2.pyd to dist\_bz2.pyd
Copy C:\Python34\DLLs\_ctypes.pyd to dist\_ctypes.pyd
Copy C:\Python34\DLLs\_socket.pyd to dist\_socket.pyd
Copy C:\Python34\DLLs\pyexpat.pyd to dist\pyexpat.pyd
Copy C:\Python34\DLLs\_hashlib.pyd to dist\_hashlib.pyd
Copy C:\Python34\DLLs\_lzma.pyd to dist\_lzma.pyd
Copy C:\Python34\DLLs\select.pyd to dist\select.pyd
Copy C:\Python34\DLLs\_ssl.pyd to dist\_ssl.pyd
จะได้โฟลเดอร์ dist ข้างในจะประกอบด้วยไฟล์รวมถึงไฟล์ notesbook.exe สำหรับเรียกใช้งาน

ศึกษารายละเอียดเกี่ยวกับ  setup-script ได้ที่ http://www.py2exe.org.
ติดตามบทความต่อไปนะครับ
ขอบคุณครับ

0 ความคิดเห็น:

แสดงความคิดเห็น

แสดงความคิดเห็นได้ครับ :)