Python(wiki en chs)是一門弱類型解釋型腳本語言,擁有動態類型系統和垃圾回收功能,支持多種編程范式:面向對象、命令式、函數式和過程式編程。
由於Python擁有一個巨大而廣泛的標准庫,這使得Python功能十分強大,開發者在標准庫提供的基礎上能快速完成想要的功能。
Python在所有操作系統上實現了解釋器,這使得Python可以跨平台運行於不同操作系統之上。
可使用跨平台vsCode(github wiki en wiki chs)來編輯和調試Python腳本(注:調試需要安裝ms-python 其github在這里,可在vscode的Extensions面板中搜索python找到它然后直接安裝)。
ms-python提供了高亮、debug、格式化、測試等功能
還可以在vscode中安裝MagicPython,來進行語法高亮、美化等功能
在vsCode為當前python文件指定python版本
還有一款比較好用的python IDE:PyCharm
PyCharm 是由 JetBrains 打造的一款 Python IDE,支持 macOS、 Windows、 Linux 系統
其功能包括 : 調試、語法高亮、Project管理、代碼跳轉、智能提示、自動完成、單元測試、版本控制
Python有2個版本:Python2(2000.10.16發布)和Python3(2008.12.3發布)。
Python3不完全兼容Python2。不過由於Python2使用廣泛,后來很多Python3新特性也被移植到舊的Python2.6/2.7版本中。
如:在Python2中,print是一個關鍵字;而Python3中,print是一個函數。
適用於Python3以上版本以及Python2.6/2.7
print("Hello, world!")
適用於Python2.6以下版本以及Python2.6/2.7
print "Hello, world!"
Python2.7建議下載Python 2.7.15及以上版本:這些版本已集成setuptools模塊和pip插件管理工具
pylint模塊(代碼靜態檢查):pip install pylint
Python的幾個重要環境變量:
變量名 | 描述 |
PYTHONPATH | PYTHONPATH是Python搜索路徑,默認我們import的模塊都會從PYTHONPATH里面尋找 |
PYTHONSTARTUP | Python啟動后,先尋找PYTHONSTARTUP環境變量,然后執行此變量指定的文件中的代碼 |
PYTHONCASEOK | 加入PYTHONCASEOK的環境變量, 就會使python導入模塊的時候不區分大小寫 |
PYTHONHOME | 另一種模塊搜索路徑。該變量中定義的路徑會被環境變量PYTHONSTARTUP和PYTHONPATH引用 |
然而,Python腳本需安裝Python環境才能被解釋執行,為了使開發出的Python腳本在所有的機器上運行,我們可以使用py2exe來發行我們的Python腳本。
py2exe可以把Python腳本轉換成windows下的exe可執行程序(即不需安裝Python)。
Python2.7(32位)請下載安裝:py2exe-0.6.9.win32-py2.7.exe
Python2.7(64位)請下載安裝:py2exe-0.6.9.win64-py2.7.amd64.exe
注:安裝完Python后,會將Python的安裝目錄添加到系統變量的Path中
下載其他Python2對應的py2exe版本請訪問:https://sourceforge.net/projects/py2exe/files/py2exe/0.6.9/
Python3.3/3.4(32位)請下載安裝:py2exe-0.9.2.2.win32.exe
Python3.3/3.4(64位)請下載安裝:py2exe-0.9.2.2.win-amd64.exe
注:py2exe不支持最新Python3.6(原因是Python3.6采用了新的字節碼格式)
由於我的本機開發環境是Python2.7(32位),因此安裝對應的安裝包是py2exe-0.6.9.win32-py2.7.exe
安裝完成后,py2exe會向E:\Python27目錄中拷貝如下文件和目錄
注1:py2exe-wininst.log為安裝日志,記錄詳細的安裝過程
注2:Removepy2exe.exe為卸載程序,執行E:\Python27\Removepy2exe.exe -u "E:\Python27\py2exe-wininst.log"卸載py2exe
py2exe主要實現如下功能:
① 編譯Python標准庫成字節碼,並打包到library.zip壓縮包中
② 拷貝Python相關的運行時庫
③ 轉換Python腳本成exe可執行文件
④ 拷貝相關的資源文件
下文以CalcMD5.py為例,說明py2exe轉換過程:
1. Python2.7(32位)環境下使用vscode編寫的CalcMD5.py
#!/usr/bin/env python #coding=utf-8 import BaseLib if __name__ == '__main__': BaseLib.PrintHello()
BaseLib.py的內容如下:
#!/usr/bin/env python #coding=utf-8 def PrintHello(): print "Hello"
2. 編寫py2exe轉換腳本setup.py(放在CalcMD5.py同一目錄)
from distutils.core import setup import py2exe setup(console=["CalcMD5.py"])
更多setup.py配置用法說明:
① 上述 setup.py 中指定產生一個 console 程序; 若要產生一個有 windows 窗口的程序,將 "console" 改成 "windows":
setup(windows=["CalcMD5.py"])
② 若要生成多個可執行文件,只要將多個python文件名以 list 方式傳給 setup() 即可:
setup(console=["CalcMD5.py", "other1.py", "other2.py"])
③ 也可以同時產生 console 和 windows 程序:
setup(console=["CalcMD5.py", "other1.py"], windows=["other2.py"])
④ 應用程序有時需要使用到一些外部文件,例如字體或是圖片等, 通過setup()的data_files參數,可以將這些額外的文件加入發布目錄中。
將一個或多個 (目的目錄, [源文件1,源文件2...源文件n]) 形成的 tuple,包裝成 list 指派給 data_files參數即可:
setup(console=["CalcMD5.py", "other1.py"], windows=["other2.py"], data_files=[("img",[r"d:\documents\pic1.jpg",r"d:\documents\pic2.jpg"]), ("xml",[r"e:\config.xml"])] )
最后產生的dist目錄中,應該會有一個img目錄,內含 pic1.jpg 和 pic2.jpg 兩個文件,以及 xml 目錄,內含一個 config.xml 文件。
⑤ 更多setup.py的語法請參考py2exe的例子 Lib\site-packages\py2exe\samples
3. 在CalcMD5.py目錄下,執行以下命令進行轉換
E:\Python27\python.exe setup.py py2exe
生成轉換日志如下:

running py2exe creating I:\Test\PythonTest\PyPrj1\build creating I:\Test\PythonTest\PyPrj1\build\bdist.win32 creating I:\Test\PythonTest\PyPrj1\build\bdist.win32\winexe creating I:\Test\PythonTest\PyPrj1\build\bdist.win32\winexe\collect-2.7 creating I:\Test\PythonTest\PyPrj1\build\bdist.win32\winexe\bundle-2.7 creating I:\Test\PythonTest\PyPrj1\build\bdist.win32\winexe\temp creating I:\Test\PythonTest\PyPrj1\dist *** searching for required modules *** *** parsing results *** creating python loader for extension 'unicodedata' (e:\Python27\DLLs\unicodedata.pyd -> unicodedata.pyd) creating python loader for extension 'select' (e:\Python27\DLLs\select.pyd -> select.pyd) creating python loader for extension '_hashlib' (e:\Python27\DLLs\_hashlib.pyd -> _hashlib.pyd) creating python loader for extension 'bz2' (e:\Python27\DLLs\bz2.pyd -> bz2.pyd) *** finding dlls needed *** *** create binaries *** *** byte compile python files *** byte-compiling I:\Test\PythonTest\PyPrj1\BaseLib.py to BaseLib.pyc byte-compiling I:\Test\PythonTest\PyPrj1\build\bdist.win32\winexe\temp\_hashlib.py to _hashlib.pyc byte-compiling I:\Test\PythonTest\PyPrj1\build\bdist.win32\winexe\temp\bz2.py to bz2.pyc byte-compiling I:\Test\PythonTest\PyPrj1\build\bdist.win32\winexe\temp\select.py to select.pyc byte-compiling I:\Test\PythonTest\PyPrj1\build\bdist.win32\winexe\temp\unicodedata.py to unicodedata.pyc byte-compiling e:\Python27\lib\StringIO.py to StringIO.pyc byte-compiling e:\Python27\lib\UserDict.py to UserDict.pyc byte-compiling e:\Python27\lib\__future__.py to __future__.pyc byte-compiling e:\Python27\lib\_abcoll.py to _abcoll.pyc byte-compiling e:\Python27\lib\_strptime.py to _strptime.pyc byte-compiling e:\Python27\lib\_threading_local.py to _threading_local.pyc byte-compiling e:\Python27\lib\_weakrefset.py to _weakrefset.pyc byte-compiling e:\Python27\lib\abc.py to abc.pyc byte-compiling e:\Python27\lib\atexit.py to atexit.pyc byte-compiling e:\Python27\lib\base64.py to base64.pyc byte-compiling e:\Python27\lib\bdb.py to bdb.pyc byte-compiling e:\Python27\lib\calendar.py to calendar.pyc byte-compiling e:\Python27\lib\cmd.py to cmd.pyc byte-compiling e:\Python27\lib\codecs.py to codecs.pyc byte-compiling e:\Python27\lib\collections.py to collections.pyc byte-compiling e:\Python27\lib\copy.py to copy.pyc byte-compiling e:\Python27\lib\copy_reg.py to copy_reg.pyc byte-compiling e:\Python27\lib\difflib.py to difflib.pyc byte-compiling e:\Python27\lib\dis.py to dis.pyc byte-compiling e:\Python27\lib\doctest.py to doctest.pyc byte-compiling e:\Python27\lib\dummy_thread.py to dummy_thread.pyc byte-compiling e:\Python27\lib\encodings\__init__.py to encodings\__init__.pyc creating I:\Test\PythonTest\PyPrj1\build\bdist.win32\winexe\collect-2.7\encodings byte-compiling e:\Python27\lib\encodings\aliases.py to encodings\aliases.pyc byte-compiling e:\Python27\lib\encodings\ascii.py to encodings\ascii.pyc byte-compiling e:\Python27\lib\encodings\base64_codec.py to encodings\base64_codec.pyc byte-compiling e:\Python27\lib\encodings\big5.py to encodings\big5.pyc byte-compiling e:\Python27\lib\encodings\big5hkscs.py to encodings\big5hkscs.pyc byte-compiling e:\Python27\lib\encodings\bz2_codec.py to encodings\bz2_codec.pyc byte-compiling e:\Python27\lib\encodings\charmap.py to encodings\charmap.pyc byte-compiling e:\Python27\lib\encodings\cp037.py to encodings\cp037.pyc byte-compiling e:\Python27\lib\encodings\cp1006.py to encodings\cp1006.pyc byte-compiling e:\Python27\lib\encodings\cp1026.py to encodings\cp1026.pyc byte-compiling e:\Python27\lib\encodings\cp1140.py to encodings\cp1140.pyc byte-compiling e:\Python27\lib\encodings\cp1250.py to encodings\cp1250.pyc byte-compiling e:\Python27\lib\encodings\cp1251.py to encodings\cp1251.pyc byte-compiling e:\Python27\lib\encodings\cp1252.py to encodings\cp1252.pyc byte-compiling e:\Python27\lib\encodings\cp1253.py to encodings\cp1253.pyc byte-compiling e:\Python27\lib\encodings\cp1254.py to encodings\cp1254.pyc byte-compiling e:\Python27\lib\encodings\cp1255.py to encodings\cp1255.pyc byte-compiling e:\Python27\lib\encodings\cp1256.py to encodings\cp1256.pyc byte-compiling e:\Python27\lib\encodings\cp1257.py to encodings\cp1257.pyc byte-compiling e:\Python27\lib\encodings\cp1258.py to encodings\cp1258.pyc byte-compiling e:\Python27\lib\encodings\cp424.py to encodings\cp424.pyc byte-compiling e:\Python27\lib\encodings\cp437.py to encodings\cp437.pyc byte-compiling e:\Python27\lib\encodings\cp500.py to encodings\cp500.pyc byte-compiling e:\Python27\lib\encodings\cp720.py to encodings\cp720.pyc byte-compiling e:\Python27\lib\encodings\cp737.py to encodings\cp737.pyc byte-compiling e:\Python27\lib\encodings\cp775.py to encodings\cp775.pyc byte-compiling e:\Python27\lib\encodings\cp850.py to encodings\cp850.pyc byte-compiling e:\Python27\lib\encodings\cp852.py to encodings\cp852.pyc byte-compiling e:\Python27\lib\encodings\cp855.py to encodings\cp855.pyc byte-compiling e:\Python27\lib\encodings\cp856.py to encodings\cp856.pyc byte-compiling e:\Python27\lib\encodings\cp857.py to encodings\cp857.pyc byte-compiling e:\Python27\lib\encodings\cp858.py to encodings\cp858.pyc byte-compiling e:\Python27\lib\encodings\cp860.py to encodings\cp860.pyc byte-compiling e:\Python27\lib\encodings\cp861.py to encodings\cp861.pyc byte-compiling e:\Python27\lib\encodings\cp862.py to encodings\cp862.pyc byte-compiling e:\Python27\lib\encodings\cp863.py to encodings\cp863.pyc byte-compiling e:\Python27\lib\encodings\cp864.py to encodings\cp864.pyc byte-compiling e:\Python27\lib\encodings\cp865.py to encodings\cp865.pyc byte-compiling e:\Python27\lib\encodings\cp866.py to encodings\cp866.pyc byte-compiling e:\Python27\lib\encodings\cp869.py to encodings\cp869.pyc byte-compiling e:\Python27\lib\encodings\cp874.py to encodings\cp874.pyc byte-compiling e:\Python27\lib\encodings\cp875.py to encodings\cp875.pyc byte-compiling e:\Python27\lib\encodings\cp932.py to encodings\cp932.pyc byte-compiling e:\Python27\lib\encodings\cp949.py to encodings\cp949.pyc byte-compiling e:\Python27\lib\encodings\cp950.py to encodings\cp950.pyc byte-compiling e:\Python27\lib\encodings\euc_jis_2004.py to encodings\euc_jis_2004.pyc byte-compiling e:\Python27\lib\encodings\euc_jisx0213.py to encodings\euc_jisx0213.pyc byte-compiling e:\Python27\lib\encodings\euc_jp.py to encodings\euc_jp.pyc byte-compiling e:\Python27\lib\encodings\euc_kr.py to encodings\euc_kr.pyc byte-compiling e:\Python27\lib\encodings\gb18030.py to encodings\gb18030.pyc byte-compiling e:\Python27\lib\encodings\gb2312.py to encodings\gb2312.pyc byte-compiling e:\Python27\lib\encodings\gbk.py to encodings\gbk.pyc byte-compiling e:\Python27\lib\encodings\hex_codec.py to encodings\hex_codec.pyc byte-compiling e:\Python27\lib\encodings\hp_roman8.py to encodings\hp_roman8.pyc byte-compiling e:\Python27\lib\encodings\hz.py to encodings\hz.pyc byte-compiling e:\Python27\lib\encodings\idna.py to encodings\idna.pyc byte-compiling e:\Python27\lib\encodings\iso2022_jp.py to encodings\iso2022_jp.pyc byte-compiling e:\Python27\lib\encodings\iso2022_jp_1.py to encodings\iso2022_jp_1.pyc byte-compiling e:\Python27\lib\encodings\iso2022_jp_2.py to encodings\iso2022_jp_2.pyc byte-compiling e:\Python27\lib\encodings\iso2022_jp_2004.py to encodings\iso2022_jp_2004.pyc byte-compiling e:\Python27\lib\encodings\iso2022_jp_3.py to encodings\iso2022_jp_3.pyc byte-compiling e:\Python27\lib\encodings\iso2022_jp_ext.py to encodings\iso2022_jp_ext.pyc byte-compiling e:\Python27\lib\encodings\iso2022_kr.py to encodings\iso2022_kr.pyc byte-compiling e:\Python27\lib\encodings\iso8859_1.py to encodings\iso8859_1.pyc byte-compiling e:\Python27\lib\encodings\iso8859_10.py to encodings\iso8859_10.pyc byte-compiling e:\Python27\lib\encodings\iso8859_11.py to encodings\iso8859_11.pyc byte-compiling e:\Python27\lib\encodings\iso8859_13.py to encodings\iso8859_13.pyc byte-compiling e:\Python27\lib\encodings\iso8859_14.py to encodings\iso8859_14.pyc byte-compiling e:\Python27\lib\encodings\iso8859_15.py to encodings\iso8859_15.pyc byte-compiling e:\Python27\lib\encodings\iso8859_16.py to encodings\iso8859_16.pyc byte-compiling e:\Python27\lib\encodings\iso8859_2.py to encodings\iso8859_2.pyc byte-compiling e:\Python27\lib\encodings\iso8859_3.py to encodings\iso8859_3.pyc byte-compiling e:\Python27\lib\encodings\iso8859_4.py to encodings\iso8859_4.pyc byte-compiling e:\Python27\lib\encodings\iso8859_5.py to encodings\iso8859_5.pyc byte-compiling e:\Python27\lib\encodings\iso8859_6.py to encodings\iso8859_6.pyc byte-compiling e:\Python27\lib\encodings\iso8859_7.py to encodings\iso8859_7.pyc byte-compiling e:\Python27\lib\encodings\iso8859_8.py to encodings\iso8859_8.pyc byte-compiling e:\Python27\lib\encodings\iso8859_9.py to encodings\iso8859_9.pyc byte-compiling e:\Python27\lib\encodings\johab.py to encodings\johab.pyc byte-compiling e:\Python27\lib\encodings\koi8_r.py to encodings\koi8_r.pyc byte-compiling e:\Python27\lib\encodings\koi8_u.py to encodings\koi8_u.pyc byte-compiling e:\Python27\lib\encodings\latin_1.py to encodings\latin_1.pyc byte-compiling e:\Python27\lib\encodings\mac_arabic.py to encodings\mac_arabic.pyc byte-compiling e:\Python27\lib\encodings\mac_centeuro.py to encodings\mac_centeuro.pyc byte-compiling e:\Python27\lib\encodings\mac_croatian.py to encodings\mac_croatian.pyc byte-compiling e:\Python27\lib\encodings\mac_cyrillic.py to encodings\mac_cyrillic.pyc byte-compiling e:\Python27\lib\encodings\mac_farsi.py to encodings\mac_farsi.pyc byte-compiling e:\Python27\lib\encodings\mac_greek.py to encodings\mac_greek.pyc byte-compiling e:\Python27\lib\encodings\mac_iceland.py to encodings\mac_iceland.pyc byte-compiling e:\Python27\lib\encodings\mac_latin2.py to encodings\mac_latin2.pyc byte-compiling e:\Python27\lib\encodings\mac_roman.py to encodings\mac_roman.pyc byte-compiling e:\Python27\lib\encodings\mac_romanian.py to encodings\mac_romanian.pyc byte-compiling e:\Python27\lib\encodings\mac_turkish.py to encodings\mac_turkish.pyc byte-compiling e:\Python27\lib\encodings\mbcs.py to encodings\mbcs.pyc byte-compiling e:\Python27\lib\encodings\palmos.py to encodings\palmos.pyc byte-compiling e:\Python27\lib\encodings\ptcp154.py to encodings\ptcp154.pyc byte-compiling e:\Python27\lib\encodings\punycode.py to encodings\punycode.pyc byte-compiling e:\Python27\lib\encodings\quopri_codec.py to encodings\quopri_codec.pyc byte-compiling e:\Python27\lib\encodings\raw_unicode_escape.py to encodings\raw_unicode_escape.pyc byte-compiling e:\Python27\lib\encodings\rot_13.py to encodings\rot_13.pyc byte-compiling e:\Python27\lib\encodings\shift_jis.py to encodings\shift_jis.pyc byte-compiling e:\Python27\lib\encodings\shift_jis_2004.py to encodings\shift_jis_2004.pyc byte-compiling e:\Python27\lib\encodings\shift_jisx0213.py to encodings\shift_jisx0213.pyc byte-compiling e:\Python27\lib\encodings\string_escape.py to encodings\string_escape.pyc byte-compiling e:\Python27\lib\encodings\tis_620.py to encodings\tis_620.pyc byte-compiling e:\Python27\lib\encodings\undefined.py to encodings\undefined.pyc byte-compiling e:\Python27\lib\encodings\unicode_escape.py to encodings\unicode_escape.pyc byte-compiling e:\Python27\lib\encodings\unicode_internal.py to encodings\unicode_internal.pyc byte-compiling e:\Python27\lib\encodings\utf_16.py to encodings\utf_16.pyc byte-compiling e:\Python27\lib\encodings\utf_16_be.py to encodings\utf_16_be.pyc byte-compiling e:\Python27\lib\encodings\utf_16_le.py to encodings\utf_16_le.pyc byte-compiling e:\Python27\lib\encodings\utf_32.py to encodings\utf_32.pyc byte-compiling e:\Python27\lib\encodings\utf_32_be.py to encodings\utf_32_be.pyc byte-compiling e:\Python27\lib\encodings\utf_32_le.py to encodings\utf_32_le.pyc byte-compiling e:\Python27\lib\encodings\utf_7.py to encodings\utf_7.pyc byte-compiling e:\Python27\lib\encodings\utf_8.py to encodings\utf_8.pyc byte-compiling e:\Python27\lib\encodings\utf_8_sig.py to encodings\utf_8_sig.pyc byte-compiling e:\Python27\lib\encodings\uu_codec.py to encodings\uu_codec.pyc byte-compiling e:\Python27\lib\encodings\zlib_codec.py to encodings\zlib_codec.pyc byte-compiling e:\Python27\lib\fnmatch.py to fnmatch.pyc byte-compiling e:\Python27\lib\functools.py to functools.pyc byte-compiling e:\Python27\lib\genericpath.py to genericpath.pyc byte-compiling e:\Python27\lib\getopt.py to getopt.pyc byte-compiling e:\Python27\lib\gettext.py to gettext.pyc byte-compiling e:\Python27\lib\hashlib.py to hashlib.pyc byte-compiling e:\Python27\lib\heapq.py to heapq.pyc byte-compiling e:\Python27\lib\inspect.py to inspect.pyc byte-compiling e:\Python27\lib\io.py to io.pyc byte-compiling e:\Python27\lib\keyword.py to keyword.pyc byte-compiling e:\Python27\lib\linecache.py to linecache.pyc byte-compiling e:\Python27\lib\locale.py to locale.pyc byte-compiling e:\Python27\lib\logging\__init__.py to logging\__init__.pyc creating I:\Test\PythonTest\PyPrj1\build\bdist.win32\winexe\collect-2.7\logging byte-compiling e:\Python27\lib\ntpath.py to ntpath.pyc byte-compiling e:\Python27\lib\opcode.py to opcode.pyc byte-compiling e:\Python27\lib\optparse.py to optparse.pyc byte-compiling e:\Python27\lib\os.py to os.pyc byte-compiling e:\Python27\lib\os2emxpath.py to os2emxpath.pyc byte-compiling e:\Python27\lib\pdb.py to pdb.pyc byte-compiling e:\Python27\lib\pickle.py to pickle.pyc byte-compiling e:\Python27\lib\posixpath.py to posixpath.pyc byte-compiling e:\Python27\lib\pprint.py to pprint.pyc byte-compiling e:\Python27\lib\quopri.py to quopri.pyc byte-compiling e:\Python27\lib\random.py to random.pyc byte-compiling e:\Python27\lib\re.py to re.pyc byte-compiling e:\Python27\lib\repr.py to repr.pyc byte-compiling e:\Python27\lib\shlex.py to shlex.pyc byte-compiling e:\Python27\lib\sre.py to sre.pyc byte-compiling e:\Python27\lib\sre_compile.py to sre_compile.pyc byte-compiling e:\Python27\lib\sre_constants.py to sre_constants.pyc byte-compiling e:\Python27\lib\sre_parse.py to sre_parse.pyc byte-compiling e:\Python27\lib\stat.py to stat.pyc byte-compiling e:\Python27\lib\string.py to string.pyc byte-compiling e:\Python27\lib\stringprep.py to stringprep.pyc byte-compiling e:\Python27\lib\struct.py to struct.pyc byte-compiling e:\Python27\lib\subprocess.py to subprocess.pyc byte-compiling e:\Python27\lib\tempfile.py to tempfile.pyc byte-compiling e:\Python27\lib\textwrap.py to textwrap.pyc byte-compiling e:\Python27\lib\threading.py to threading.pyc byte-compiling e:\Python27\lib\token.py to token.pyc byte-compiling e:\Python27\lib\tokenize.py to tokenize.pyc byte-compiling e:\Python27\lib\traceback.py to traceback.pyc byte-compiling e:\Python27\lib\types.py to types.pyc byte-compiling e:\Python27\lib\unittest\__init__.py to unittest\__init__.pyc creating I:\Test\PythonTest\PyPrj1\build\bdist.win32\winexe\collect-2.7\unittest byte-compiling e:\Python27\lib\unittest\case.py to unittest\case.pyc byte-compiling e:\Python27\lib\unittest\loader.py to unittest\loader.pyc byte-compiling e:\Python27\lib\unittest\main.py to unittest\main.pyc byte-compiling e:\Python27\lib\unittest\result.py to unittest\result.pyc byte-compiling e:\Python27\lib\unittest\runner.py to unittest\runner.pyc byte-compiling e:\Python27\lib\unittest\signals.py to unittest\signals.pyc byte-compiling e:\Python27\lib\unittest\suite.py to unittest\suite.pyc byte-compiling e:\Python27\lib\unittest\util.py to unittest\util.pyc byte-compiling e:\Python27\lib\warnings.py to warnings.pyc byte-compiling e:\Python27\lib\weakref.py to weakref.pyc *** copy extensions *** copying e:\Python27\DLLs\_hashlib.pyd -> I:\Test\PythonTest\PyPrj1\dist copying e:\Python27\DLLs\bz2.pyd -> I:\Test\PythonTest\PyPrj1\dist copying e:\Python27\DLLs\select.pyd -> I:\Test\PythonTest\PyPrj1\dist copying e:\Python27\DLLs\unicodedata.pyd -> I:\Test\PythonTest\PyPrj1\dist *** copy dlls *** copying e:\Python27\w9xpopen.exe -> I:\Test\PythonTest\PyPrj1\dist copying C:\Windows\system32\python27.dll -> I:\Test\PythonTest\PyPrj1\dist setting sys.winver for 'I:\Test\PythonTest\PyPrj1\dist\python27.dll' to 'py2exe' copying e:\Python27\lib\site-packages\py2exe\run.exe -> I:\Test\PythonTest\PyPrj1\dist\CalcMD5.exe *** binary dependencies *** Your executable(s) also depend on these dlls which are not included, you may or may not need to distribute them. Make sure you have the license if you distribute any of them, and make sure you don't distribute files belonging to the operating system. USER32.dll - C:\Windows\system32\USER32.dll SHELL32.dll - C:\Windows\system32\SHELL32.dll ADVAPI32.dll - C:\Windows\system32\ADVAPI32.dll WS2_32.dll - C:\Windows\system32\WS2_32.dll GDI32.dll - C:\Windows\system32\GDI32.dll KERNEL32.dll - C:\Windows\system32\KERNEL32.dll
build目錄是轉換時生成的臨時文件,最終轉換出來的文件存放在dist目錄中。執行CalcMD5.exe就可以打印出Hello字符串了。
最后將dist目錄打包,就可以拷貝給他人使用了
Py2exe僅支持windows平台,其他python腳本轉可執行程序工具
① Pyinstaller支持windows/linux/Mac osx,它本身並不是python模塊。
② Py2app是把mac osx下的python程序打包的工具。