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

2 投票
4 回答
784 浏览
提问于 2025-04-18 18:45

下面这段代码在Python的命令行里运行得很好,可以显示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

试试这样做:

from pyalgotrade import strategy
print strategy

然后告诉我们你得到了什么结果。

1

你正在从一个叫 pyalgotrade 的模块中导入一个叫 strategy 的函数,这个函数是在那个模块里定义的。而这个 pyalgotrade.strategy 的子模块被这个函数给隐藏了。

你可能想写的是:

import pyalgotrade.strategy as strategy

在第一行。

2

Django其实就是Python:在Django中,所有在普通Python中发生的事情,关于模块的读取都是一样的。

无论如何,你对问题的判断是错误的:无法读取模块不会导致你看到的那个错误。错误信息说的是一个函数对象没有TestingStrategy这个属性。这意味着在某个地方,你把strategy重新定义成了一个函数,而不是你最开始导入的那个模块。

1

修改库并不是一个真正的解决办法,这只是一种临时的解决方案。看看你遇到的错误:

'function' object has no attribute 'BacktestingStrategy'

这不是导入的问题:在某个地方你把 strategy 重新定义成了一个函数。不仅如此,我刚刚安装了 pyalgotrade,然后做了以下操作,没有遇到任何问题:

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

检查一下你导入的其他东西,确保你的命名没有搞混。

记住,Django 其实就是 Python;它并没有做什么特别的事情,是你在某些地方出错了。(这也是一个很好的学习机会!)

撰写回答