【问题标题】:pymongo - "dnspython" module must be installed to use mongodb+srv:// URIspymongo - 必须安装“dnspython”模块才能使用 mongodb+srv:// URI
【发布时间】:2022-04-20 13:39:05
【问题描述】:

我正在尝试从 Atlas 连接 MongoDB。

我的 mongo uri 是:mongodb+srv://abc:123@something.something.com/admin?retryWrites=True

我的pymongo版本3.6.1

我已经安装了dnspython并完成了import dns

但我仍然收到此错误:

必须安装dnspython模块才能使用mongodb+srv://URI

【问题讨论】:

  • 我需要重新表述我的问题。我设法通过重新启动我的 jupyter notebook 的内核来解决这个问题。

标签: python mongodb pymongo


【解决方案1】:

要使用mongo+srv协议,需要安装pymongo-srv 使用 python 3 启动此命令:

pip3 install pymongo[srv]

或者其他版本的这个:

pip install pymongo[srv]

按照@lukrebs 的建议,为 ZSH 添加引号:

pip3 install 'pymongo[srv]'

【讨论】:

  • 对于正在使用macos和zsh并获得zsh: no matches found: pymongo[srv]的人,可以尝试pip3 install 'pymongo[srv]'
【解决方案2】:

我解决了这个问题:

$ python -m pip install pymongo[srv]

【讨论】:

  • 对于 python3 用户,以下内容也很有用:python3-m pip install pymongo[srv]
  • 如果使用zsh,你的命令必须是python3 -m pip install 'pymongo[srv]'
【解决方案3】:

我想在这里回答我自己的问题。正如我在评论中提到的,必须重新启动 jupyter notebook 的内核才能使 pymongo 生效加载的dnspython

【讨论】:

  • 我在命令行“pip install dnspython==1.15.0”中执行此操作后错误消失了
  • 那是我的问题!谢谢!
【解决方案4】:

在 requirements.txt 中,将pymongo 替换为pymongo[tls,srv],如here 所述。

【讨论】:

    【解决方案5】:

    我遇到了同样的问题并尝试过

    pip install dnspython==2.0.0

    这是来自https://pypi.org/project/dnspython/的最新版本

    成功了:D

    【讨论】:

    • dnspython==2.0.0 也适用于我,即使它不适用于 pymongo[tls,srv] 和 dnspython==1.16.0。
    • 你救了我。谢谢。
    【解决方案6】:

    您可以使用mongo:// 代替mongodb+srv://

    【讨论】:

    • 我认为旧版本的 mongo 不支持副本。如果您使用mongo://,最终的URI 将是mongo://db-part-0.host.com:27017, db-part-1.host.com:27017, db-part-2.host.com:27017。是的,URI 中有逗号。
    【解决方案7】:

    可能是协议,你的 URI 应该以:

    mongo+srv 而不是 mongo+src

    如果仍然无法正常工作,请列出 PyMongo 和 dnspython 版本(以及您正在使用的 python 版本)的 pip 列表

    【讨论】:

    • 没有mongo+srv这样的东西有mongodb+srv
    【解决方案8】:

    我在 Ubuntu 18 上遇到了同样的问题,但因为我使用的是 Anaconda 我刚试过

    Conda install dns python
    

    我运行了一个 IPython,但在打开同一个实例时它不起作用,但当我重新启动该实例时它起作用了。

    在不同的机器上使用

    Conda install dns python
    

    它确实有效,但由于不同的原因,我不得不在测试之前完全重新启动我的机器

    【讨论】:

      【解决方案9】:
      pip install dnspython
      

      dnspython 是 Python 的 DNS 工具包。它支持几乎所有的记录类型。它可用于查询、区域传输和动态更新。它支持 TSIG 认证消息和 EDNS0。

      【讨论】:

        【解决方案10】:

        我遇到了同样的问题,发现下面一行。

        import dns.resolver
        dns.resolver.default_resolver=dns.resolver.Resolver(configure=False)
        dns.resolver.default_resolver.nameservers=['8.8.8.8'] 
        

        它对我有用。

        【讨论】:

          猜你喜欢
          • 2019-11-22
          • 2020-05-23
          • 2017-03-03
          • 1970-01-01
          • 2021-02-24
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多