2014-12-05 66 views
0

我最近轉移到PyPy。它的速度非常快,但很多python庫尚未實現。所以我有很多自制的python函數,我想在PyPy代碼中調用。在pypy中調用python文件

這裏是我的問題:有沒有辦法在PyPy中調用python文件或函數,並傳遞一些參數?

一個代碼示例:

我使用不受PyPy,matplotlib例如支持庫名爲python_code.py一個Python模塊。

import matplotlib as mp 

def my_custom_ploting_function(*args,**kwargs): 
    some code 

,我想創建一個名爲pypy_code.py這樣的PyPY模塊:

from python_code import my_custom_ploting_function 

def my_custom_pypy_ploting_function(*args,**kwargs): 
    my_custom_ploting_function(*args,**kwargs) 

但是這個代碼將無法正常工作,因爲PyPy無法導入python_code模塊,因爲這樣會嘗試導入matplotlib(PyPy不支持)。

+1

你是什麼意思與*「傳遞一些論據」*?你可以在PyPY中使用'sys.argv'作爲命令行參數。或者你的意思是別的嗎?我一點也不清楚你究竟在問什麼。 – Carpetsmoker 2014-12-05 10:20:29

+0

感謝您的回答,我剛剛編輯了這個問題,現在更清楚了嗎? – hulyce 2014-12-05 10:54:28

回答

1

你不能期望導入模塊,並讓它們在運行一半CPython和一半PyPy的相同程序中共存。然而,你可以做的是主要在兩個解釋器中的一箇中運行你的程序,並將另一個視爲一個額外的庫,與低於Python對象的層進行通信。

例如,如果僅想使用matplotlib顯示一些圖形,可以從PyPy啓動CPython的程序(與os.system()subprocess模塊),並通過它以一種方式或另一種顯示的數據(例如,通過發送到管道)。如果這對於你想要的限制太有限制,還有其他更多涉及的替代方案。例如,您可以在PyPy中加載libpython2.7.so並使用CFFI調用其C API。或者相反:將PyPy嵌入CPython中(例如http://jitpy.readthedocs.org/en/latest/)。

1

你不能運行(或導入)需要模塊不被pypy支持的pyrit scritps。

你其實可以use matplotlib from within pypy,但它非常非常hackish(很難做到)。

這裏的簡單答案是只是使用普通python。如果您正在進行數字操作,無論如何,所有密集的代碼應該在numpy之內。