在Django中导入python模块:未加载__init__.py类

时间:2014-08-27 18:04:12

标签: python django python-2.7 pyalgotrade

以下代码在python shell中正常工作,显示了feed对象的内容:

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模块的strategy文件夹内的__ init__.py文件中定义的类,在python路径中。

我对这个问题的理解是django没有读取__ init__.py文件,因此没有正确导入模块(pyalgotrade模块)。

有没有办法告诉Django这样做?

提前致谢并抱歉这个愚蠢的问题。

干杯

4 个答案:

答案 0 :(得分:2)

Django只是Python:在普通Python中没有任何事情发生在Django关于模块的阅读中不会发生。

在任何情况下,您对问题的诊断都是错误的:未能读取模块不会给出您看到的错误。错误消息表明函数对象不包含属性TestingStrategy。这意味着您重新定义strategy的某个地方是一个函数,而不是您最初导入的模块。

答案 1 :(得分:1)

您正在从那里定义的模块strategy导入函数pyalgotrade。子函数pyalgotrade.strategy被此函数隐藏。

可能你想写:

import pyalgotrade.strategy as strategy

在第一行。

答案 2 :(得分:1)

修改库并不是真正解决方案,它只是一个黑客攻击。看看你得到的错误:

'function' object has no attribute 'BacktestingStrategy'

这不是一个导入问题:您正在重新定义strategy作为函数。不仅如此,我刚刚安装了pyalgotrade并做了以下工作:

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

查看您已导入的任何其他内容,并确保直接拥有所有姓名。

记住,Django只是python;它没有做任何不同的事情,做错了什么。 (这为你提供了学习东西的绝佳机会!)

答案 3 :(得分:0)

尝试这样做:

from pyalgotrade import strategy
print strategy

让我们知道你得到了什么。