2014-08-27 69 views
2

下面的代碼工作在Python殼細,顯示進料對象的內容:導入蟒模塊在Django:__init__.py類未加載

from pyalgotrade import strategy 
from pyalgotrade.barfeed import yahoofeed 


class MyStrategy(strategy.BacktestingStrategy): 
    def __init__(self, feed, instrument): 
     strategy.BacktestingStrategy.__init__(self, feed) 
     self.__instrument = instrument 

    def onBars(self, bars): 
     bar = bars[self.__instrument] 
     self.info(bar.getClose()) 



feed = yahoofeed.Feed() 
feed.addBarsFromCSV("orcl","data/bistampTicker.csv") 

myStrategy = MyStrategy(feed, "orcl") 
myStrategy.run() 

然而,它在一個Django視圖執行導致以下錯誤:

'function' object has no attribute 'BacktestingStrategy' 

凡BacktestingStrategy是在Python模塊的策略文件夾中的__ init__.py文件中定義的類,Python路徑中。

我對這個問題的理解是,django沒有讀取__init__.py文件,因此沒有正確導入模塊(一個pyalgotrade模塊)。

有沒有辦法讓Django這麼做?

在此先感謝您,並且對於無關緊要的問題感到抱歉。

乾杯

+0

我搜索了幾個小時,在提交帖子後找到了解決方案的幾分鐘,修改了庫,以便在strategy.py中定義策略類,而不是策略/__init__.py。不是非常優雅,但做的工作。 – Bertrand 2014-08-27 18:20:54

回答

1

修改庫不是真的是一個解決方案,它只是一個破解。看看錯誤你得到:

'function' object has no attribute 'BacktestingStrategy' 

這不是一個導入問題:你的地方重新定義strategy的功能。不僅如此,我剛安裝pyalgotrade並沒有順利如下:

>>> from pyalgotrade import strategy 
>>> strategy.BacktestingStrategy 
<class 'pyalgotrade.strategy.BacktestingStrategy'> 

看一看其他任何你進口,並確保你把所有的名字直。請記住,Django只是python,而不是Django。它沒有什麼不同,做錯了什麼。 (它給你一個極好的機會,學到一些東西!)

+0

嗯,你和丹尼爾羅斯曼是對的,我確實重新定義了戰略作爲一個功能前一段時間在文件中,並忘記了它...感謝耐心小吃! – Bertrand 2014-08-27 19:02:45

2

Django是的Python:沒有什麼東西是發生在普通的Python至於閱讀模塊,可以不Django的發生。

在任何情況下,您對該問題的診斷都是錯誤的:未能閱讀該模塊將不會給出您看到的錯誤。錯誤消息表明函數對象不包含屬性TestingStrategy。這意味着你已經將strategy重新定義爲一個函數,而不是你最初導入的模塊。

+0

它確實到達了模塊的目錄,因爲它不會抱怨策略沒有被定義。它的行爲就好像BacktestingStrategy類在__ init__.py文件中定義時一樣不存在。無論如何,我解決了它做了一個修改過的庫,其中所有的類都在strategy.py中定義,而不是在strategy/__ init__.py – Bertrand 2014-08-27 18:20:15

+1

中定義。我不知道你是如何從我的答案中得到的,我認爲策略沒有定義。恰恰相反,我說你是在你的模塊中定義策略。 – 2014-08-27 18:24:39

+0

嗯,我相信我沒有重新定義策略,並且使用相同模塊的相同代碼可以在python shell中正常工作。由於在單個文件strategy.py中重寫策略模塊而不是__ init__.py在文件夾策略中/ works是否沒有顯示Django沒有加載__ init__.py?上述代碼的最後四行由http請求執行。我想這是Django不加載__ init__.py的原因。 – Bertrand 2014-08-27 18:41:04

1

您正在從此處定義的模塊pyalgotrade導入功能strategy。子功能模塊pyalgotrade.strategy被此功能隱藏。

也許你想寫:

import pyalgotrade.strategy as strategy 

在第一線。

+0

這是我提交線程時的錯字,從pyalgotrade導入策略確實給出錯誤 – Bertrand 2014-08-27 18:17:32

+0

@ BertrandRouet-Leduc:請參閱我的編輯。 – Daniel 2014-08-27 18:25:36

0

試着這樣做:

from pyalgotrade import strategy 
print strategy 

,讓我們知道你會得到什麼。

相關問題