2013-09-25 88 views
3

這是一個非常新手的問題,但在Google搜索一段時間後,我一直無法找到解決方案。我正在使用Eclipse(在Linux Mint中)編寫一個Python代碼,它需要使用Fortran 77編寫的例程(代碼位於名爲fortran_code.f的文件中)。我用f2py獲取文件fortran_code.so。該文件與Python代碼位於同一文件夾中(../workspace/python_project/src)。在Python代碼僅包括:將fortran文件導入python

import fortran_code 
a = 10 
fortran_code.fortran_subroutine(a) 

一旦再次,結果是:

Traceback (most recent call last): File 
"/home/user/Documents/workspace/python_project/src/Main.py", line 7, 
in <module> 
import fortran_code ImportError: /home/user/Documents/workspace/python_project/src/fortran_code.so: 
undefined symbol: PyCObject_Type 

的子程序的Fortran代碼爲:

SUBROUTINE fortran_subroutine(a) 
REAL*8, intent(in) :: a 
REAL*8 b 
b=a*2 
end subroutine fortran_subroutine 

要獲得.so文件(fortran_code。所以)我用:

f2py -c fortran_code.f -m fortran_code 

該ver f2py的版本是2.而Python的版本是2.7.4

任何幫助解決這個問題將是非常有用的。

謝謝!

+1

如果有可能將Fortran代碼放在​​問題中,那可能是錯誤的。 – Developer

+1

您使用的是哪個版本的f2py和Python? ''CObjects'已被刪除,並被Python 3.0中的'Capsule'取代[(見這裏)](http://docs.python.org/2/howto/cporting.html)。我的猜測是,f2py會生成由Python 3.0(或更新版本)解釋的Python 2.7(或更早版本)的代碼。 –

+0

並且在調用'f2py'時添加你正在使用的命令。 –

回答

0

爲了使它工作,我不得不將Python解釋器從Python 3.2修改爲Python 2.7(因爲f2py爲Python 2.7生成代碼)。編輯新的Python模塊後,一切正常!

感謝您提供的所有建議和意見,這些都非常有幫助。