1. 程式人生 > >程式碼遷移攻略:在Java工程中呼叫Python程式碼

程式碼遷移攻略:在Java工程中呼叫Python程式碼

Python是一門好用的指令碼語言,底層基於C實現,快速且簡單。使用python可以說是站在巨人肩膀上程式設計,使得程式設計師更專注於業務及邏輯,而不是被人學爛的語言工具。但是團隊合作時候,就會有一些多語言程式設計,然後整合的問題,例如我遇到的Java和Python。為了方便非Python程式設計師能夠使用寫好的python程式,需要考慮兩個方面:
- 環境是否可遷移,在沒有python環境的機器上如何執行。
- Java如何實現與python的互動。

環境遷移
方案一
(1) 安裝python環境,寫入path路徑
(2) 保證pip可以正常使用,cmd切換到路徑下:c:/Python27/Scripts>pip
(3) pip install -r requirement.txt
site-packages裡面放的是第三方包。包可以通過import 引入程式中。 因此,需要提前寫好requirement.txt檔案,包含一堆依賴


方案二
將python打包成exe,可以在無python環境的windows環境下執行python程式碼。有兩個工具可供使用:
Py2exe:
python2.7 對應0.6.9版本的py2exe,需要另外建立setup.py,且不支援win64. 具體見:python打包程式py2exe實戰
PyInstaller:
推薦使用,
(1)首先安裝:pip install pyinstaller
(2)開始打包成exe
- 命令提示符cd 到需要打包的檔案的目錄
- 直接在命令提示符中輸入pyinstaller -F 檔名.py 注意F要大些,呵呵就這麼簡單
- 打包成功後會出現兩個資料夾,其中一個就是所需要的exe檔案;
注:若是gui檔案可以在輸入pyinstaller -F -w檔名.py 其中w是小寫,意思就是五命令列視窗,預設的是-c有命令列視窗,當然一般的檔案也可以-w,這樣命令列視窗就沒有了。
pyinstaller 的其他常用的引數
- “- -icon=圖示路徑”
- “-F 打包成一個exe檔案”
- “-w 使用視窗,無控制檯”
- “-c 使用控制檯,無視窗”
- “-D 建立一個目錄,裡面包含exe以及其他一些依賴性檔案 還有一些可以通過pyinstaller -h 來檢視引數”
例如:
C:\Users\Desktop\exe>pyinstaller -F c:/helloworld.py
exe存放地址> pyinstaller -F 目標檔案

Java如何實現與python的互動。
解決:檔案讀寫。Java輸出的資料,交給python讀取並處理。python輸出處理結果到檔案,Java讀取並進行後續工作。
Java中執行python指令碼的三種方式
(1) 直接執行Python指令碼程式碼
引用 org.python包

PythonInterpreter interpreter = new PythonInterpreter();  
interpreter.exec("days=('mod','Tue','Wed','Thu','Fri','Sat','Sun'); ");   ///執行python指令碼

(2) 執行python .py檔案

PythonInterpreter interpreter = new PythonInterpreter();  
InputStream filepy = new FileInputStream("D:\\demo.py"); 
interpreter.execfile(filepy);  ///執行python py檔案
filepy.close();

(3)使用Runtime.getRuntime()執行指令碼檔案
這種方式和.net下面呼叫cmd執行命令的方式類似。如果執行的python指令碼有引用第三方包的,建議使用此種方式。使用上面兩種方式會報錯java ImportError: No module named arcpy。

Process proc = Runtime.getRuntime().exec("python  D:\\demo.py");  
proc.waitFor();