Python cho người Việt

Python cho người Việt

Entries tagged “freeze”

Đóng băng ứng dụng với cx_Freeze

written by Nguyễn Thành Nam, on Dec 1, 2009 12:54:13 PM.

Python là ngôn ngữ thông dịch nên để chạy các ứng dụng viết bằng Python, chúng ta cần phải cài bộ thông dịch. Thao tác này hơi luộm thuộm đối với người dùng cuối, nên thông thường chúng ta hay tự hỏi liệu có cách nào đó để chuyển ứng dụng của chúng ta thành một tập tin .EXE như các ứng dụng Windows khác không.

Rất may mắn là chúng ta có thể đạt được mục đích này với chương trình cx_Freeze.

Chúng ta sẽ bắt đầu với một ví dụ đơn giản. Hãy tạo một tập tin helloworld.py với nội dung sau:

# helloworld.py
print "Hello World!"

Khi chạy chương trình bé nhỏ này (giả sử nó đang nằm trong thư mục c:\tmp, chúng ta nhận kết quả như sau:

c:\tmp>c:\Python26\python helloworld.py
Hello World!

c:\tmp>

Bây giờ chúng ta sẽ cài đặt cx_Freeze. Đối với ví dụ trên, chúng ta sẽ phải chọn bản cài đặt cho Windows, và cho phiên bản Python 2.6. Sau khi cài đặt cx_Freeze thì tập tin thực thi sẽ được đặt trong c:\python26\scripts\cxfreeze.

Để đóng băng chương trình helloworld.py, chúng ta thực hiện lệnh cxfreeze helloworld.py:

c:\tmp>c:\Python26\scripts\cxfreeze helloworld.py
coyping c:\python26\lib\site-packages\cx_Freeze\bases\Console.exe -> c:\tmp\dist
\helloworld.exe
coyping C:\Windows\system32\python26.dll -> c:\tmp\dist\python26.dll
writing zip file c:\tmp\dist\helloworld.exe

  Name                      File
  ----                      ----
m StringIO
m UserDict
m __builtin__
m __future__
m __main__                  helloworld.py
m _abcoll
m _bisect
m _codecs
m _codecs_cn
m _codecs_hk
m _codecs_iso2022
m _codecs_jp
m _codecs_kr
m _codecs_tw
m _collections
m _functools
m _heapq
m _locale
m _multibytecodec
m _random
m _sre
m _strptime
m _struct
m _subprocess
m _threading_local
m _warnings
m abc
m array
m base64
m bdb
m binascii
m bisect
m bz2                       c:\python26\DLLs\bz2.pyd
m cPickle
m cStringIO
m calendar
m cmd
m codecs
m collections
m copy
m copy_reg
m cx_Freeze__init__         c:\python26\lib\site-packages\cx_Freeze\initscripts\
Console.py
m datetime
m difflib
m dis
m doctest
m dummy_thread
P encodings
m encodings.aliases
m encodings.ascii
m encodings.base64_codec
m encodings.big5
m encodings.big5hkscs
m encodings.bz2_codec
m encodings.charmap
m encodings.cp037
m encodings.cp1006
m encodings.cp1026
m encodings.cp1140
m encodings.cp1250
m encodings.cp1251
m encodings.cp1252
m encodings.cp1253
m encodings.cp1254
m encodings.cp1255
m encodings.cp1256
m encodings.cp1257
m encodings.cp1258
m encodings.cp424
m encodings.cp437
m encodings.cp500
m encodings.cp737
m encodings.cp775
m encodings.cp850
m encodings.cp852
m encodings.cp855
m encodings.cp856
m encodings.cp857
m encodings.cp860
m encodings.cp861
m encodings.cp862
m encodings.cp863
m encodings.cp864
m encodings.cp865
m encodings.cp866
m encodings.cp869
m encodings.cp874
m encodings.cp875
m encodings.cp932
m encodings.cp949
m encodings.cp950
m encodings.euc_jis_2004
m encodings.euc_jisx0213
m encodings.euc_jp
m encodings.euc_kr
m encodings.gb18030
m encodings.gb2312
m encodings.gbk
m encodings.hex_codec
m encodings.hp_roman8
m encodings.hz
m encodings.idna
m encodings.iso2022_jp
m encodings.iso2022_jp_1
m encodings.iso2022_jp_2
m encodings.iso2022_jp_2004
m encodings.iso2022_jp_3
m encodings.iso2022_jp_ext
m encodings.iso2022_kr
m encodings.iso8859_1
m encodings.iso8859_10
m encodings.iso8859_11
m encodings.iso8859_13
m encodings.iso8859_14
m encodings.iso8859_15
m encodings.iso8859_16
m encodings.iso8859_2
m encodings.iso8859_3
m encodings.iso8859_4
m encodings.iso8859_5
m encodings.iso8859_6
m encodings.iso8859_7
m encodings.iso8859_8
m encodings.iso8859_9
m encodings.johab
m encodings.koi8_r
m encodings.koi8_u
m encodings.latin_1
m encodings.mac_arabic
m encodings.mac_centeuro
m encodings.mac_croatian
m encodings.mac_cyrillic
m encodings.mac_farsi
m encodings.mac_greek
m encodings.mac_iceland
m encodings.mac_latin2
m encodings.mac_roman
m encodings.mac_romanian
m encodings.mac_turkish
m encodings.mbcs
m encodings.palmos
m encodings.ptcp154
m encodings.punycode
m encodings.quopri_codec
m encodings.raw_unicode_escape
m encodings.rot_13
m encodings.shift_jis
m encodings.shift_jis_2004
m encodings.shift_jisx0213
m encodings.string_escape
m encodings.tis_620
m encodings.undefined
m encodings.unicode_escape
m encodings.unicode_internal
m encodings.utf_16
m encodings.utf_16_be
m encodings.utf_16_le
m encodings.utf_32
m encodings.utf_32_be
m encodings.utf_32_le
m encodings.utf_7
m encodings.utf_8
m encodings.utf_8_sig
m encodings.uu_codec
m encodings.zlib_codec
m errno
m functools
m gc
m genericpath
m getopt
m gettext
m heapq
m imp
m inspect
m itertools
m keyword
m linecache
m locale
m marshal
m math
m msvcrt
m nt
m ntpath
m opcode
m operator
m optparse
m os
m pdb
m pickle
m posixpath
m pprint
m quopri
m random
m re
m repr
m select                    c:\python26\DLLs\select.pyd
m shlex
m signal
m sre_compile
m sre_constants
m sre_parse
m stat
m string
m stringprep
m strop
m struct
m subprocess
m sys
m tempfile
m textwrap
m thread
m threading
m time
m token
m tokenize
m traceback
m types
m unicodedata               c:\python26\DLLs\unicodedata.pyd
m unittest
m warnings
m zipimport
m zlib

coyping c:\python26\DLLs\bz2.pyd -> c:\tmp\dist\bz2.pyd
coyping c:\python26\DLLs\select.pyd -> c:\tmp\dist\select.pyd
coyping c:\python26\DLLs\unicodedata.pyd -> c:\tmp\dist\unicodedata.pyd

c:\tmp>

Kết quả của lệnh này là helloworld.py được đóng băng trong thư mục dist:

c:\tmp>dir /s dist
 Volume in drive C is OS
 Volume Serial Number is B07D-8588

 Directory of c:\tmp\dist

12/01/2009  12:42 PM    <DIR>          .
12/01/2009  12:42 PM    <DIR>          ..
12/01/2009  12:42 PM            71,168 bz2.pyd
12/01/2009  12:42 PM         1,423,792 helloworld.exe
12/01/2009  12:42 PM         2,149,888 python26.dll
12/01/2009  12:42 PM            11,776 select.pyd
12/01/2009  12:42 PM           585,728 unicodedata.pyd
               5 File(s)      4,242,352 bytes

     Total Files Listed:
               5 File(s)      4,242,352 bytes
               2 Dir(s)  118,923,808,768 bytes free

c:\tmp>

Và bây giờ chúng ta có thể đóng gói, hoặc nén các tập tin trong thư mục này để chuyển đến người dùng cuối. Tập tin thực thi chính của chúng ta chính là helloworld.exe.

c:\tmp>cd dist

c:\tmp\dist>helloworld.exe
Hello World!

c:\tmp\dist>

cx_Freeze còn nhận một số tham số dòng lệnh khác. Bạn có thể tham khảo thêm bằng cách chạy cxfreeze --help.

Ngoài cx_Freeze còn có một số công cụ khác có chức năng tương tụ ví dụ như py2exe.