Qlib 常见问题

Qlib常见问题解答


1. RuntimeError: An attempt has been made to start a new process before the current process has finished its bootstrapping phase…

RuntimeError:
        尝试在当前进程完成引导阶段之前启动新进程。

        这可能意味着您在启动子进程时没有使用fork,并且您忘记在主模块中使用正确的习语:

            if __name__ == '__main__':
                freeze_support()
                ...

        如果程序不打算冻结以生成可执行文件,则可以省略"freeze_support()"行。

这是在Windows操作系统下使用multiprocessing时的限制。请参考 这里 了解更多信息。解决方案:要选择一种启动方法,您可以在主模块的 if __name__ == '__main__' 子句中使用 D.features。例如:

import qlib
from qlib.data import D


if __name__ == "__main__":
    qlib.init()
    instruments = ["SH600000"]
    fields = ["$close", "$change"]
    df = D.features(instruments, fields, start_time='2010-01-01', end_time='2012-12-31')
    print(df.head())

2. qlib.data.cache.QlibCacheException: It sees the key(…) of the redis lock has existed in your redis db now.

它发现 redis 锁的键在您的 redis 数据库中已经存在。您可以使用以下命令清除您的 redis 键,并重新运行您的命令:

$ redis-cli
> select 1
> flushdb

如果问题没有解决,请使用 keys * 查找是否存在多个键。如果是这样,请尝试使用 flushall 清除所有键。

备注

qlib.config.redis_task_db 默认值为 1,用户可以使用 qlib.init(redis_task_db=<other_db>) 进行设置。

此外,欢迎在我们的GitHub仓库中发布新问题。我们会仔细检查每个问题,并尽力解决它们。

3. ModuleNotFoundError: No module named ‘qlib.data._libs.rolling’

#### 请勿从存储库目录中导入qlib包,以防止从中的. 导入qlib时失败 #####
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "qlib/qlib/__init__.py", line 19, in init
    from .data.cache import H
File "qlib/qlib/data/__init__.py", line 8, in <module>
    from .data import (
File "qlib/qlib/data/data.py", line 20, in <module>
    from .cache import H
File "qlib/qlib/data/cache.py", line 36, in <module>
    from .ops import Operators
File "qlib/qlib/data/ops.py", line 19, in <module>
    from ._libs.rolling import rolling_slope, rolling_rsquare, rolling_resi
ModuleNotFoundError: No module named 'qlib.data._libs.rolling'
  • 如果在使用 PyCharm IDE 导入 qlib 包时出现错误,用户可以在项目根目录中执行以下命令编译Cython文件,并生成可执行文件:

    python setup.py build_ext --inplace
    
  • 如果使用命令 python 导入 qlib 包时出现错误,用户需要更改运行目录以确保脚本不在项目目录中运行。

4. BadNamespaceError: / is not a connected namespace

File "qlib_online.py", line 35, in <module>
  cal = D.calendar()
File "e:\code\python\microsoft\qlib_latest\qlib\qlib\data\data.py", line 973, in calendar
  return Cal.calendar(start_time, end_time, freq, future=future)
File "e:\code\python\microsoft\qlib_latest\qlib\qlib\data\data.py", line 798, in calendar
  self.conn.send_request(
File "e:\code\python\microsoft\qlib_latest\qlib\qlib\data\client.py", line 101, in send_request
  self.sio.emit(request_type + "_request", request_content)
File "G:\apps\miniconda\envs\qlib\lib\site-packages\python_socketio-5.3.0-py3.8.egg\socketio\client.py", line 369, in emit
  raise exceptions.BadNamespaceError(
BadNamespaceError: / is not a connected namespace.
  • qlibpython-socketio 的版本需要与 qlib-server 中的 python-socketio 版本保持一致:

    pip install -U python-socketio==<qlib-server python-socketio version>
    

5. TypeError: send() got an unexpected keyword argument ‘binary’

File "qlib_online.py", line 35, in <module>
  cal = D.calendar()
File "e:\code\python\microsoft\qlib_latest\qlib\qlib\data\data.py", line 973, in calendar
  return Cal.calendar(start_time, end_time, freq, future=future)
File "e:\code\python\microsoft\qlib_latest\qlib\qlib\data\data.py", line 798, in calendar
  self.conn.send_request(
File "e:\code\python\microsoft\qlib_latest\qlib\qlib\data\client.py", line 101, in send_request
  self.sio.emit(request_type + "_request", request_content)
File "G:\apps\miniconda\envs\qlib\lib\site-packages\socketio\client.py", line 263, in emit
  self._send_packet(packet.Packet(packet.EVENT, namespace=namespace,
File "G:\apps\miniconda\envs\qlib\lib\site-packages\socketio\client.py", line 339, in _send_packet
  self.eio.send(ep, binary=binary)
TypeError: send() got an unexpected keyword argument 'binary'