Qlib常见问题

Qlib常见问题解答


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

RuntimeError:
        尝试在当前进程完成引导阶段之前启动新进程。
        这可能意味着您没有使用 fork 来启动子进程,并且您忘记使用正确的语法。
        in the main module:

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

        The "freeze_support()" line can be omitted if the program
        is not going to be frozen to produce an executable.

这是由于Windows操作系统下多进程的限制造成的。更多信息请参考 这里

解决方案:在主模块的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: 发现Redis数据库中已存在Redis锁的key(...)。

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

$ redis-cli
> select 1
> flushdb

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

备注

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

另外,欢迎在我们的GitHub仓库中提交新的issue。我们会认真检查每个issue并尽力解决。

3. ModuleNotFoundError: 没有名为'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: /不是已连接的命名空间

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.
  • qlib中的``python-socketio``版本需要与qlib-server中的``python-socketio``版本相同:

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

5. TypeError: send()收到意外的关键字参数'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'