2015-12-30 61 views
0

我在Eclipse中結合了java和python代碼,當我想執行包含pandas模塊的python腳本時,我從java class中調用了null值。否則,如果我不使用熊貓模塊,但只是簡單的Python腳本一切正常。我認爲PyDev解釋器正確,並且所有python模塊的路徑配置正確,因爲我沒有得到任何導入錯誤,並且當我在代碼中覆蓋鼠標時,我可以獲取模塊信息。在Eclipse中使用python pandas模塊火星

所有模塊位於/usr/local/lib/python2.7/site-packages。

請檢查java classpython scriptPyDev配置:

package test4; 

import java.io.BufferedReader; 
import java.io.InputStreamReader; 
import java.util.Scanner; 

public class test4 { 

public static void main(String a[]){ 
    try{ 

    ProcessBuilder pb = new ProcessBuilder("/usr/local/bin/python2.7","solinor_final.py"); 
    Process p = pb.start(); 
    System.out.println("Hello"); 
    String line = null; 
    StringBuilder sb = new StringBuilder(); 
    BufferedReader in = null; 

    try { 
     in = new BufferedReader(new InputStreamReader(p.getInputStream())); 

     while((line=in.readLine())!=null) { 
      sb.append(line); 
      System.out.println(line); 

     } 


    } finally { 

     in.close(); 
    } 


    System.out.println("value is : "+sb); 

    }catch(Exception e){System.out.println(e);} 
    } 

} 

的Python:

import sys 

    sys.path.append("/usr/local/bin") 
    sys.path.append("/usr/bin/") 
     sys.path.append('/Users/quuppa/Documents/workspace/test4/report1.csv') 


import pandas as pd 


def main(): 
    import python_class as so 
    print "Hello inside" 

    data = pd.read_csv("report1.csv",sep=",",header=None) 
    data = data.rename(columns={0:'Merchant name',1:'Business ID',2:'Main merchant ID',3:'Report type',4:'Report search date',5:'Report period',\ 
          6:'Outlet name',7:'Address',8:'Number of transactions',9:'Value of transactions',10:'Commission',11:'Chargebacks and adjustments',12:'Settlement value'}) 

    data = data.drop([data.index[0]]) 

    bd = so.Solinor(data) 

    total_amount = bd.totalAmount() 
    print total_amount 

if __name__ == "__main__": 
    main() 

這些是具有和不包括大熊貓模塊的輸出:

Hello 
value is : 

Hello 
Hello inside 
value is : Hello inside 

配置圖像:

enter image description here

你有任何建議,這可能是在運行與大熊貓模塊的代碼有問題嗎?

謝謝!

回答

0

我找到了解決這個問題的方法。最有效的方法就是使用沒有PyDev和PYTHONPATH設置的ProcessBuilder。必要的修改是在ProcessBuilder中添加第一個參數成爲python安裝的完整路徑,在我的情況下,這是在/usr/local/Cellar/python/2.7.10_2/Frameworks/Python.framework/Versions/2.7/bin/ python2.7,第二個參數是主Python腳本的完整路徑。

第二種修改是將python腳本放在Eclipse工作區之外,並將完整路徑作爲ProcessBuilder中的第二個參數傳遞給主python腳本。我認爲PyDev以某種方式在閱讀使用C編寫的庫(例如numpy)時遇到問題。

0

有些事情,我感覺不對勁了,你可以調查:

  1. 你設置的PYTHONPATH是你不應該在你的腳本做,而是已在PYTHONPATH從外部設定(或者在PyDev中,讓它爲你管理它) - 也沒有理由把report1.csv放在PYTHONPATH中(即:不要把東西放在sys.path中)。

  2. pd.read_csv(「report1.csv」,sep =「,」,header = None):使用report1.csv的完整路徑。

  3. 爲你的代碼創建一個單獨的項目 - 不要把它放到/usr/local/bin/python2.7。

不過,我真的不知道什麼是錯的,但我的建議是首先使得它在普通的Python工作(因此,使用PyDev調試運行Python代碼和調試出了什麼問題)後,才和考慮將其集成到java/jython中(請確保您閱讀入門手冊http://www.pydev.org/manual_101_root.html以正確設置以在調試器中運行)。

+0

謝謝法比奧!我做了你所說的一切,現在PyDev報告'AttributeError:'模塊'對象沒有屬性'Integral'',作爲'noduy模塊'的一部分'numbers module',當我運行python時非常奇怪。 – Beltrif

0

你也可以嘗試下面的步驟。我從blog得到這個,這對我很有幫助。然而,步驟...

1日下載和安裝蟒蛇2.x和然後如下

對我說,解決這個問題唯一的辦法就是徹底刪除(窗口 - >首選項 - > pydev->解釋器python->刪除),然後用Auto Config再次添加它。

如果你有一些軟件包沒有安裝,那麼只需在控制檯 conda install <package_name>下運行這個命令,它將被下載並應該立即工作。