Импорт модуля 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

и дайте нам знать, что вы получите.

Другие вопросы по тегам