Python腳本在其他語言環境中的應用方案
Python腳本如何才能更順暢的使用呢,其實有很多的方法,下面我們就來學習下有關于Python腳本的相關介紹。希望大家有所收獲。把Python腳本和所用到的庫打包為exe文件,可以更方便的發布程序,避免使用程序的每個電腦都必須安裝Python。
網上有不少相關介紹,但很少見到Python 3.x下打包Python腳本為exe的成功案例,筆者探索了一下,成功完成了任務,記錄下來分享給需要的朋友。歡迎交流。
根據自己的系統類型和Python版本下載合適的類型,我下載的是:cx_Freeze-4.1.2.win32-py3.1.msi。這個工具目前最新版本是2010.1.6號的,還挺新的。
我要打包的是BlogPost.py和它依賴的模塊。
A、準備工作。
a、去除代碼中所有中文字符,包括注釋。(指定編碼的注釋可以不去掉沒有關系)
b、如果用到類似lxml這樣的第三方庫,可能會出現找不到_elementpath模塊的錯誤。需要在某個.py文件中寫上import _elementpath as DONTUSE,并且指定該模的搜索路徑。(我的該模塊所在路徑是:C:\Python25\Lib\site-packages\lxml\_elementpath.py)
B、命令行執行。
- C:\Python31\Scripts\cxfreeze.bat –include-path=C:\Python25
\Lib\site-packages\lxml –init-script=D:\Projects\Google\
pyblogpost\2exe\BlogPost.py BlogPost.py
(1)–init-script指定的啟動文件路徑必須用絕對路徑,否則會提示找不到init script。
(2)只能指定一個要打包的模塊,也就是啟動模塊。
(3)所有.py文件都不能有中文字符,否則會出現編碼異常。
(4)執行上述命令后,在會生成dist目錄,里面就有打包后的可執行文件。
(5)發布后,可執行文件執行路徑不能有中文(最好也不要有空格)。而且最好發布dist目錄所有文件,我發現有時只發布打包后的exe是無法運行的。
(6)啟動執行的文件中不要有下面這種判斷,否則可執行文件執行會沒有任何效果。
- if __name__ == “__main__”:
- main()
(7)如果沒有指定–include-path,或者沒有在某個.py文件中寫上import _elementpath as DONTUSE,都會出現如下找不到_elementpath模塊的錯誤:
- D:\Projects\Google\pyblogpost\2exe\dist>BlogPost.exe
- Traceback (most recent call last):
- File “D:\Projects\Google\pyblogpost\2exe\BlogPost.py”, line
11, in <module>- import BlogConfig
- File “BlogConfig.py”, line 5, in <module>
- File “ExtensionLoader_lxml_etree.py”, line 12, in <module>
- File “lxml.etree.pyx”, line 39, in init lxml.etree (src/lxml/
lxml.etree.c:1399- 44)
- ImportError: No module named _elementpath
- (8)不能有中文,即使是注釋中也不能有,否則出現如下錯誤。
- codeString = fp.read()
- File “C:\Python31\lib\codecs.py”, line 300, in decode
- (result, consumed) = self._buffer_decode(data, self.errors,
final)- UnicodeDecodeError: ‘utf8′ codec can’t decode bytes in
position 557-558: invalid- data
- 嘗試把編碼由cp936改為utf-8,也不可以,把文件中ASCII另存為UTF-8,
也不行,有如下錯誤:- File “BlogConfig.py”, line 1
- \ufeff#!/usr/bin/python
- SyntaxError: invalid character in identifier
補充說明另外一種打包方式。第3點講的是通過命令行指定參數打包,也可以采用如下方式:
(1)新建setup.py文件,內容大致如下:(我使用的是上述第3點講述的方法,沒有修改參數)
(2)在命令行執行:python setup.py build。這種打包方法,在cxfreeze工具的sample中也大量使用。
Python 2.x版本
上面的cx_Freeze同樣提供for Python 2.x的版本,用法我估計也差不多,不再贅述。加上這一節,是記錄一下之前我用Python 2.x寫一個小工具用py2exe打包的過程。
先安裝py2exe工具。
然后用下面setup.py腳本:
- from distutils.core import setup
- import py2exe
- options = {“py2exe”: {“bundle_files”: 1}}
- setup(optionsoptions = options,
- zipfile = None,
- console=["hello.py"],)
Python腳本命令行執行:
- C:\Python26\python.exe setup.py py2exe
Python腳本就會在dist目錄生成單一的hello.exe文件,這個文件是可執行的。
【編輯推薦】


















