目的:通過(guò)python修改xml配置文件,并將python腳本編譯成可執(zhí)行文件
一衅码、通過(guò)python修改xml配置文件
如下是待修改的EAICfg.xml
<?xml version='1.0' encoding='utf-8'?>
<root>
<subRoot>
<testService>
<publishProfile profileName="Contoso - FTP" publishMethod="FTP" publishUrl="114.114.114.114" ftpPassiveMode="True" userName="some_ftp_user" userPWD="some_ftp_pwd" destinationAppUrl="http://site.server.contoso.com/" SQLServerDBConnectionString="server=contoso-mssql;uid=db_user;pwd=db_pwd;database=some_db" mySQLDBConnectionString="server=contoso-mysql;uid=db_user;pwd=db_pwd;database=some_db" hostingProviderForumLink="http://support.contoso.com/" controlPanelLink="http://controlpanel.contoso.com/" />
<comment key="sss" ip="huhu" attr="old" />
</testService>
</subRoot>
<testService2>
<publishProfile profileName="Contoso - FTP" publishMethod="FTP" publishUrl="0000" ftpPassiveMode="True" userName="some_ftp_user" userPWD="some_ftp_pwd" destinationAppUrl="http://site.server.contoso.com/" SQLServerDBConnectionString="server=contoso-mssql;uid=db_user;pwd=db_pwd;database=some_db" mySQLDBConnectionString="server=contoso-mysql;uid=db_user;pwd=db_pwd;database=some_db" hostingProviderForumLink="http://support.contoso.com/" controlPanelLink="http://controlpanel.contoso.com/" />
<comment key="sss" ip="000" attr="000" />
<comment key="sss" ip="000" attr="000" />
<comment key="aaa" ip="000" attr="newAttr" />
<comment ip="000" attr="000" />
</testService2>
</root>
python提供了xml.etree.ElementTree API藤违,用于解析和創(chuàng)建XML數(shù)據(jù)
如下是用于修改xml文件的相應(yīng)代碼test.py
#!/usr/bin/python
# -*- coding: UTF-8 -*-
import xml.etree.ElementTree as ET
# 修改本地xml文件
def change_xml(xml_path, change_list):
'''
修改本地xml文件
xml_path:xml路徑
change_list:需要修改內(nèi)容浪腐,
[{'xml_json_path': 'json_path路徑', 'data':{'元素屬性名稱':'元素屬性值'}}]
例子:
[{'xml_json_path': './/property[@name = "ReportName"]', 'data':{'value':'666955555'}}]
'''
print(xml_path)
# 打開(kāi)xml文件
doc = ET.parse(xml_path)
root = doc.getroot()
for change in change_list:
# 查找修改路徑
for sub1 in root.findall(change['xml_json_path']):
# 修改標(biāo)簽內(nèi)容
for key, value in change['data'].items():
# 修改內(nèi)容
sub1.set(key, value)
# 保存修改
doc.write(xml_path)
doc.write(xml_path, encoding='utf-8', xml_declaration=True)
# change_xml('EAICfg.xml',[{'xml_json_path': 'testService2/comment', 'data':{'ip':'114.114.114.114','attr':'newAttr'}},
# {'xml_json_path': 'subRoot/testService/publishProfile[@publishMethod="FTP"]', 'data':{'publishUrl':'114.114.114.114'}}])
#為避免可執(zhí)行文件報(bào)錯(cuò)找不到路徑下的文件,需要用絕對(duì)路徑
change_xml('/Users/yuhuan/Documents/MyProjects/EAICfg.xml',[{'xml_json_path': 'testService2/comment[@key]', 'data':{'ip':'114.114.114.114','attr':'newAttr'}},
{'xml_json_path': 'subRoot/testService/publishProfile[@publishMethod="FTP"]', 'data':{'publishUrl':'114.114.114.114'}}])
# change_xml('EAICfg.xml',[{'xml_json_path': 'testService2/comment[@key="sss"]', 'data':{'ip':'114.114.114.114','attr':'newAttr'}},
# {'xml_json_path': 'subRoot/testService/publishProfile[@publishMethod="FTP"]', 'data':{'publishUrl':'114.114.114.114'}}])
二顿乒、將python腳本編譯成可執(zhí)行文件
首先需要安裝pyinstaller庫(kù)
PyInstaller支持在在Windows/Linux/Mac環(huán)境下將Python腳本打包成可執(zhí)行程序议街,在沒(méi)有Python環(huán)境的機(jī)器上運(yùn)行。注意:需要在哪個(gè)操作系統(tǒng)平臺(tái)一運(yùn)行璧榄,需在相應(yīng)的操作系統(tǒng)(或虛擬機(jī))下編譯特漩。(即exe文件必須要在windows操作系統(tǒng)下編譯)
pip install pyinstaller
進(jìn)入test.py所在文件夾
pyinstaller -F test.py
常用參數(shù):
-F 生成單個(gè)的exe文件。
-w 隱藏運(yùn)行窗口骨杂。
-h 可以查看幫助信息涂身,更多指令可以通過(guò)這個(gè)查看。
生成的可執(zhí)行文件在dist目錄下搓蚪。
大功告成蛤售!
附錄:python庫(kù)pyinstaller的離線安裝
聯(lián)網(wǎng)情況下,根據(jù)pyinstaller安裝教程-官方即可完成pyinstaller的安裝。
pip install pyinstaller
若要安裝pyintaller的主機(jī)為公司內(nèi)網(wǎng)環(huán)境悴能,無(wú)法連接外網(wǎng)揣钦,我最早嘗試了官方教程中如下通過(guò)下載git源碼方式,親測(cè)無(wú)法實(shí)現(xiàn)離線安裝搜骡,因?yàn)殇浫雙ip install .之后會(huì)網(wǎng)絡(luò)請(qǐng)求下載其他依賴
git clone https://github.com/pyinstaller/pyinstaller
cd pyinstaller
pip install .
因?yàn)榘惭bpyinstaller之前需要完成其他所有依賴包的安裝拂盯,只下載pyinstaller代碼是不夠的佑女。這時(shí)找到一位同病相憐的博主的分享救了老命<敲摇!參考
由于最新官方已經(jīng)不推薦 python setup.py install 這種做法了团驱,實(shí)際可行的終極解決方案如下
內(nèi)網(wǎng)環(huán)境安裝:
首先需要到外網(wǎng)機(jī)上下載好所有需要的離線安裝包摸吠,命令為: pip download 包名 -d 下載路徑。后面的-d 和下載路徑可加可不加嚎花,不加就是下載到cmd鍵入命令時(shí)的那個(gè)目錄下寸痢。比如:pip download altgraph -d c:/ ,就是把a(bǔ)ltgraph下載到c盤(pán)的根目錄下紊选。需要注意的是啼止,命令pip download pyinstaller,會(huì)直接把pyinstaller和安裝pyinstaller需要的其他依賴包都下載下來(lái)兵罢。
注意:需要在內(nèi)網(wǎng)哪個(gè)操作系統(tǒng)實(shí)際安裝献烦,外網(wǎng)也要以同樣的操作系統(tǒng)pip download相應(yīng)包。(mac和windows執(zhí)行pip download pyinstaller 下載的依賴和安裝包版本是不一樣的)下載好后把所有的包傳到內(nèi)網(wǎng)機(jī)卖词,然后一個(gè)一個(gè) pip install 加包名即可巩那,注意安裝的順序,需要先安裝依賴包此蜈,最后安裝下劃線的pyinstaller包即横。
pip install XXXXXXX.whl
3.驗(yàn)證安裝是否成功
pyinstaller --version