Skip to content

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
ใช้ MIT License สามารถเอาไปบีบอัดส่งออกเป็นโปรแกรมเพื่อการค้าได้

การติดตั้ง

-ใช้ pip โดยใช้คำสั่ง

python -m pip install py2exe

หรือ

pip install py2exe

-โหลดไฟล์ติดตั้ง ได้ที่ https://pypi.python.org/pypi/py2exe/

สำหรับ Python 3.4 ขึ้นไป ให้ทำโหลดไฟล์จาก https://sourceforge.net/p/py2exe/svn/HEAD/tarball?path=/trunk/py2exe-3 แตกไฟล์ แล้วเปิด cmd เข้าไปยังโฟลเดอร์ py2exe-3 แล้วใช้คำสั่ง

python setup.py build

แล้วติดตั้งด้วยคำสั่ง

python setup.py install

สำหรับ Python 2 เท่านั้น สามารถโหลดไฟล์ติดตั้งได้จาก http://sourceforge.net/projects/py2exe/files/py2exe/0.6.9/ ครับ

Compile python 3 ให้เป็น exe

ใช้คำสั่ง

python -m py2exe.build_exe notesbook.py --bundle-files

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

ถ้าใช้คำสั่ง

python -m py2exe.build_exe notesbook.py --bundle-files 2

ผลลัพธ์

จะเห็นได้ว่าไฟล์พวก .pyd ได้ถูกรวมมาอยู่กับไฟล์ notesbook.exe ทำให้ไฟล์ notesbook.exe มีขนาดเพิ่มขึ้น ที่แยกออกมาจะมีแค่ไฟล์ python34.dll

ถ้าใช้คำสั่ง

python -m py2exe.build_exe notesbook.py --bundle-files 1

ผลลัพธ์

จะเห็นได้ว่าคราวนี้ระบบได้รวมไฟล์  python34.dll เข้ามารวมกับไฟล์ notesbook.exe แต่คำสั่งนี้ไฟล์ข้อมูล notes.txt เมื่อรันคำสั่งไฟล์ notes.txt ยังแยกออกจาก notesbook.exe อยู่

ในกรณีที่ผู้อ่านเขียนโปรแกรม Python โดยมีการดึงข้อมูลจากไฟล์ฐานข้อมูล sqlite หากต้องการรวมไฟล์ฐานข้อมูลเข้ากับไฟล์ที่ต้องการ Compile ให้ใช้คำสั่ง

python -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 'distnotesbook.exe'.
Building shared code archive 'distlibrary.zip'.
Copy c:windowssystem32python34.dll to dist
Copy C:\Python34\DLLs\unicodedata.pyd to distunicodedata.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 distpyexpat.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 distselect.pyd
Copy C:\Python34\DLLs\_ssl.pyd to dist_ssl.pyd

จะได้โฟลเดอร์ dist ข้างในจะประกอบด้วยไฟล์รวมถึงไฟล์ notesbook.exe สำหรับเรียกใช้งาน

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

Published on Categories ไม่มีหมวดหมู่

About wannaphong

วรรณพงษ์ ภัททิยไพบูลย์ ผู้ดูแลเว็บ wannaphong.com และผู้เขียนบทความบล็อกนี้ นักศึกษาชั้นปีที่ 1 สาขาวิทยาการคอมพิวเตอร์และสารสนเทศ คณะวิทยาศาสตร์ประยุกต์และวิศวกรรมศาสตร์ มหาวิทยาลัยขอนแก่น วิทยาเขตหนองคาย

1 thought on “Compile python 3 ให้เป็น exe ด้วย py2exe

ใส่ความเห็น

อีเมลของคุณจะไม่แสดงให้คนอื่นเห็น ช่องที่ต้องการถูกทำเครื่องหมาย *