2014-08-27 68 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 

,让我们知道你会得到什么。

相关问题