shengchenyang / AyugeSpiderTools

使 scrapy 开发不用在意 item,pipeline,middleware 等通用场景下模块的编写,解放开发者的双手。
https://ayugespidertools.readthedocs.io
MIT License
75 stars 12 forks source link

python 3.11 及以上版本在使用 mongodb 相关场景时报错 ImportError: cannot import name 'coroutine' from 'asyncio' #11

Closed shengchenyang closed 1 year ago

shengchenyang commented 1 year ago

Describe the bug 当使用 python 版本为 3.11 及以上时,运行任何任一爬虫脚本会报 ImportError: cannot import name 'coroutine' from 'asyncio' (/root/.pyenv/versions/3.11.1/lib/python3.11/asyncio/__init__.py) 类似的错误。

Versions (please complete the following information):

To Reproduce Steps to reproduce the behavior:

  1. 使用 python3.11.5 环境。
  2. 安装最新 ayugespidertools 3.5.0
  3. 运行 mongodb 相关场景的脚本,或运行任一脚本即可。
  4. 出现报错。

Expected behaviorpython3.11 以下版本一样运行正常

Screenshots 无。

Additional context 报错信息的一部分:

  File "/root/.pyenv/versions/3.11.1/envs/even/lib/python3.11/site-packages/ayugespidertools/pipelines.py", line 2, in <module>
    from ayugespidertools.scraper.pipelines.mongo.asynced import AsyncMongoPipeline
  File "/root/.pyenv/versions/3.11.1/envs/even/lib/python3.11/site-packages/ayugespidertools/scraper/pipelines/mongo/asynced.py", line 4, in <module>
    import motor.motor_asyncio
  File "/root/.pyenv/versions/3.11.1/envs/even/lib/python3.11/site-packages/motor/motor_asyncio.py", line 18, in <module>
    from .frameworks import asyncio as asyncio_framework
  File "/root/.pyenv/versions/3.11.1/envs/even/lib/python3.11/site-packages/motor/frameworks/asyncio/__init__.py", line 28, in <module>
    from asyncio import coroutine  # For framework interface.
ImportError: cannot import name 'coroutine' from 'asyncio' (/root/.pyenv/versions/3.11.1/lib/python3.11/asyncio/__init__.py)
shengchenyang commented 1 year ago

出现的问题是因为 mongodb 的异步存储场景依赖 motor 实现,但是 python 3.11 移除了 coroutine decorator 而导致 motor 报错, motor3.1.1 版本中才修复,但是此版本要求的 pymongo 版本大于了 3.13.0,即在 python3.11 版本中使用 mongodb 就要拥抱 3.6 及以上版本,告别 3.4 版本了。

那我会在 pyproject.toml 中加上依赖限制,若 py 3.11 及以上使用 3.6 及以上版本的 mongo;若 py3.11 以下版本则与目前一致,保证项目的稳定变更。

shengchenyang commented 1 year ago

新版本 3.5.1 已修复了此问题,可以更新后使用,点击可跳转至对应 release 页面