Импорт модуля Python в Django: классы __init__.py не загружены
Следующий код прекрасно работает в оболочке Python, отображая содержимое объекта канала:
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 - это класс, определенный в файле __ init__.py внутри папки стратегии модуля python, внутри пути к python.
Насколько я понимаю, проблема заключается в том, что django не читает файл __ init__.py, поэтому неправильно импортирует модуль (модуль pyalgotrade).
Есть ли способ сказать Django, чтобы сделать это?
Заранее спасибо и извините за нубистский вопрос.
ура
4 ответа
Модификация библиотеки на самом деле не решение, это просто взлом. Посмотрите на ошибку, которую вы получаете:
'function' object has no attribute 'BacktestingStrategy'
Это не проблема импорта: где-то вы переопределяете strategy
как функция. Мало того, я только что установил pyalgotrade
и сделал следующее без заминок:
>>> from pyalgotrade import strategy
>>> strategy.BacktestingStrategy
<class 'pyalgotrade.strategy.BacktestingStrategy'>
Посмотрите на все, что вы импортировали, и убедитесь, что у вас есть все ваши имена прямо.
Помните, Django - просто питон; это не делает ничего другого, вы делаете что-то не так. (Что дает вам прекрасную возможность чему-то научиться!)
Django - это просто Python: в простом Python ничего не происходит, чего не происходит в Django при чтении модулей.
В любом случае, ваш диагноз проблемы неверен: если вы не прочитаете модуль, вы не увидите ошибку, которую видите. Сообщение об ошибке говорит о том, что объект функции не содержит атрибута TestingStrategy. Это будет означать, что где-то вы переопределили strategy
быть функцией, а не модулем, который вы изначально импортировали.
Вы импортируете функцию strategy
из модуля pyalgotrade
, который определен там. Подмодуль pyalgotrade.strategy
скрыт этой функцией.
Возможно, вы хотели написать:
import pyalgotrade.strategy as strategy
в первой строке.
Попробуйте сделать это:
from pyalgotrade import strategy
print strategy
и дайте нам знать, что вы получите.