2016-02-11 72 views
1

我的用戶製作的Matlab腳本與我的views.py頁面在同一目錄下,但是當它被調用時,我收到錯誤:Undefined function 'getRecs' for input arguments of type 'double'.基本上找不到腳本。在django views.py中找不到Matlab腳本

當我在同一目錄下用test.py腳本測試腳本時,一切正常,但通過瀏覽器和開發服務器通過views.py調用時,出現錯誤。

tools.py:

def get_recs(passed_list): 
    eng = matlab.engine.start_matlab() 
    recs = eng.getRecs(passed_list) 
    return recs 

test.py:(工作正常,並在同一目錄views.py和getRecs.m) (使用Pydev的的運行方式冉:Python的運行)

from tools import * 

test_ratings = [5, 0, 3, 2, 1, 5] 
conv_rates = matlab.double(initializer=test_ratings) 
new_recs = get_recs(conv_rates) 
print_list(new_recs) 

views.py:(拋出錯誤)

from tool import * 
test_ratings = [5, 0, 3, 2, 1, 5] 
def new_user(request): 
    conv_rates = matlab.double(initializer=test_ratings) 
    new_recs = get_recs(conv_rates) 
    return render_to_response('new_user.html', { 'ratings_list' :new_recs}, context_instance=RequestContext(request)) 

我使用Python 2.7,Django的1.9,和Matlab R2015b

回答

2

對於那些具有在未來這個問題的人:喜歡塞爾丘克提到的開發服務器定義了自己的目錄,所以你需要將路徑添加到您想要用於引擎的腳本。我通過加入

eng.addpath(r'C:\path\to\my\scripts\') 

在初始化和啓動引擎後。

+0

調用'eng.savepath()'可能會工作只設置一次。 – Daniel

1

Django開發服務器(或WSGI服務器)定義比您的用戶腳本所在的一個不同的默認目錄。嘗試使用addpath選項將您的用戶腳本的位置,搜索路徑:

eng = matlab.engine.start_matlab("-addpath /var/django/myproject/myapp/") 
+0

儘管您提供的代碼行並未解決問題,但感謝您解釋WSGI服務器定義了不同的目錄並指向正確的方向,非常感謝 – alextasd