Qlib 常见问题解答 ############ Qlib 常见问题 =============================== .. contents:: :depth: 1 :local: :backlinks: none ------ 1. RuntimeError: 在当前进程完成引导阶段之前,尝试启动新进程... ----------------------------------------------------------------------------------------------------------------------------------- .. code-block:: console RuntimeError: An attempt has been made to start a new process before the current process has finished its bootstrapping phase. This probably means that you are not using fork to start your child processes and you have forgotten to use the proper idiom 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. This is caused by the limitation of multiprocessing under windows OS. Please refer to `here `_ for more info. **解决方案**: 要选择启动方法,您需要在主模块的 if __name__ == '__main__' 子句中使用 ``D.features``。例如: .. code-block:: python 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锁的key(...)已存在于您的redis数据库中。 --------------------------------------------------------------------------------------------------------------- 检测到redis锁的key已存在于您的redis数据库中。您可以使用以下命令清除redis键并重新运行命令 .. code-block:: console $ redis-cli > select 1 > flushdb 如果问题仍未解决,可使用 ``keys *`` 查找是否存在多个键。若存在,可尝试使用 ``flushall`` 清除所有键。 .. note:: ``qlib.config.redis_task_db`` 默认值为 ``1``,用户可通过 ``qlib.init(redis_task_db=)`` 进行设置。 您也可以在GitHub仓库中提交新issue。我们会认真检查每个问题并尽力解决。 3. ModuleNotFoundError: 未找到名为'qlib.data._libs.rolling'的模块 ----------------------------------------------------------------- .. code-block:: python #### Do not import qlib package in the repository directory in case of importing qlib from . without compiling ##### Traceback (most recent call last): File "", line 1, in File "qlib/qlib/__init__.py", line 19, in init from .data.cache import H File "qlib/qlib/data/__init__.py", line 8, in from .data import ( File "qlib/qlib/data/data.py", line 20, in from .cache import H File "qlib/qlib/data/cache.py", line 36, in from .ops import Operators File "qlib/qlib/data/ops.py", line 19, in from ._libs.rolling import rolling_slope, rolling_rsquare, rolling_resi ModuleNotFoundError: No module named 'qlib.data._libs.rolling' - 如果在使用 ``PyCharm`` IDE导入 ``qlib`` 包时出现此错误,用户可在项目根目录下执行以下命令来编译Cython文件并生成可执行文件: .. code-block:: bash python setup.py build_ext --inplace - 如果在使用 ``python`` 命令导入 ``qlib`` 包时出现错误,用户需要更改运行目录以确保脚本不在项目目录中运行。 4. BadNamespaceError: / 不是一个已连接的命名空间 ---------------------------------------------------- .. code-block:: python File "qlib_online.py", line 35, in 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`` 版本保持一致: .. code-block:: bash pip install -U python-socketio== 5. TypeError: send() 接收到意外的关键字参数 'binary' ---------------------------------------------------------------- .. code-block:: python File "qlib_online.py", line 35, in 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' - The ``python-engineio`` version needs to be compatible with the ``python-socketio`` version, reference: https://github.com/miguelgrinberg/python-socketio#version-compatibility .. code-block:: bash pip install -U python-engineio== # or pip install -U python-socketio==3.1.2 python-engineio==3.13.2