Спасибо. Это действительно ошибка. В старых версиях был другой синтаксис. Поправлю …
Мы в конце прошлого года перешил в разработке на Python 3.9 и Pandas 1.5.0+
Google Colab только недавно перешел на 3.8. Но с новыми версиями Pandas 3.8 не работает. Пока не знаю, что с этим делать … не хочется из-за консервативности Google сидеть на старых версиях.
Python 3.9.13, Okama 1.2.3, локально JupyterLab, Jupyter Notebook
Здравствуйте, Сергей!
После установки okama (! pip install okama)
пытаюсь сделать import okama as ok
Получаю ошибку
При этом в Google Colab все отлично работает. Спасибо.
Ошибка подключения к API … она может быть связана с чем угодно. Например, с работающим VPN или антивирусом.
Сам API работает. С ним каких-то проблем не наблюдается.
Пробовал локально Jupyter Notebook/Jupyter Lab, разные ПК, браузеры, операторы связи, отключал антивирусы и брандмауэры. VPN не использую.
Также попробовал anaconda nucleus cloud (python 3.9.12). Везде проблема при выполнении import okama as ok. Работает только в google colab.
Привожу скриншоты ошибки в anaconda nucleus cloud на https://nb.anaconda.cloud/jupyterhub (немного отличается от локальных попыток).
Про локалку мне сложно сказать, в чем проблема. Я и мои коллеги ежедневно запускаем через разных провайдеров в Jupyter Lab без проблем. Единственное, что приходит в голову - проверить, что загружается версия не ниже 1.2.0. В старых версия окамы был другой URL для API.
Иногда pip или poetry устанавливает принудительно более старые версии из-за проблем совместимости с другими библиотеками.
Проверьте, работает ли у вас прямое обращение к API:
http://api.okama.io:5000/api/namespaces/
Вот это меня не удивляет. Дело в том, что многие подобные онлайн серверы блокируют импорт библиотек, если во время импорта они обращаются на сторонние HTTP. Google Colab не блокирует …
Меня эта проблема натолкнула на мысль попробовать избежать обращений куда-либо при import okama
. Сейчас это происходит по причине того что __init__.py
содержит обращение к такому модулю:
Надо подумать, можно ли это переписать через функции, чтобы при импорте модуля не было запуска.
Оформил issue на тему http обращений во время импорта окамы:
Если есть желание, это несложная задачка на попрактиковаться и оказаться среди контрибьютеров библиотеки
Google совершил невозможное
Теперь по умолчанию в Google Colab используется Python 3.10. Все примеры из блокнотов Jupyter Notebook снова работают.
После выхода версии 1.3.0 в Anaconda Nucleus Cloud установка библиотека и импорт работают (больше __init__.py
не устанавливает удаленных соединений).
Это хорошая новость. Но есть и плохая…
При загрузке экземпляра любого класса окамы происходит обращение к удаленной базе данных. А в Nucleus это запрещено… во всяком случае на бесплатном аккаунте.
Okama 1.3.0 не устанавливается на python 3.11.3. В зависимостях есть Pillow <=9.1.0, который не поддерживает python 3.11, текущая версия Pillow 9.5.0. Предыдущая версия okama 1.2.3 работает нормально.
На Python 3.11 не тестировал. Релизу меньше года. Я обычно хотя бы год жду… бывают проблемы с основными библиотеками. Но в следующей версии окамы попробую. С Pillow действительно были сложности. Возможно, разработчик уже их устранил в новой версии.
Да, и это тоже надо поправить.
Похоже, что сделаю это сильно раньше чем собирался. В 1.3.0 проглядел один неприятный баг.
__init__.py
импортирует не все алиасы, которые используются часто, в т.ч. на виджетах okama.io.
Например, сейчас нельзя посмотреть все тикеры внутри namespace: ok.symbols_in_namespace("RE")
По горячим следам сделал новый релиз 1.3.1. Теперь Python 3.11 поддерживается. Тесты на TravisCI проходят. У себя не запускал на 3.11, поэтому буду благодарен, если поделитесь, работает ли всё нормально.
На python 3.11.3 okama обновилась до версии 1.3.1. Предварительно, работает. Но при установке okama 1.3.1 был удален установленный pandas 2.0.1 и установлен pandas 1.5.3.
Да, у pandas 2.0.1 есть несовместимость со старыми версиями (в т.ч. с версией 1.5.0). Много что поменялось, пока не понятно, как заставить работать окаму и на старых версиях и на новых.
okama-1.4.1 функция namespaces.get_assets_namespaces() не понимает namespace PF, при этом PF это стандартное пространство имен для портфеля. В документации к функции сказано:
assets list, default None
List of assets. Could include tickers or asset like objects (Asset, Portfolio). If None a single asset list with a default ticker is used.
Что приводит к ошибке когда в функции plot_pair_ef() вида:
ValueError: PF is not in allowed assets namespaces: [‘US’, ‘LSE’, ‘XETR’, ‘XFRA’, ‘XSTU’, ‘XAMS’, ‘MOEX’, ‘XTAE’, ‘PIF’, ‘FX’, ‘CC’, ‘INDX’, ‘COMM’, ‘RE’, ‘CBR’]
@AndreyV Понял проблему. Добавлю PF
в список пространств имен активов.
Кстати. На сколько я понимаю, документации по этой функции нет. Откуда вы ее взяли?
Plot_pair_ef из примера, а функцию проверки в коде нашел, хотел посмотреть можно ли как-либо обойти ошибку без правки кода библиотеки. В принципе ели бы лист через который проверяется пространство имен был на уровне класса asset, то проблема решалась бы добавление нужного пространства в этот список