'pymongo - "dnspython" module must be installed to use mongodb+srv:// URIs

I am trying to connect MongoDB from Atlas.

My mongo uri is: mongodb+srv://abc:[email protected]/admin?retryWrites=True

My pymongo version is 3.6.1

I have installed dnspython and done import dns

But i still get this error:

dnspython module must be installed to use mongodb+srv:// URI



Solution 1:[1]

In order to use mongo+srv protocol, you need to install pymongo-srv Launch this command to do it with python 3:

pip3 install pymongo[srv]

or this one for other versions:

pip install pymongo[srv]

And as suggested by @lukrebs, add quotes for ZSH:

pip3 install 'pymongo[srv]'

Solution 2:[2]

I solved this problem with:

$ python -m pip install pymongo[srv]

Solution 3:[3]

I would like to answer my own questions here. As I mentioned in the comment, the kernel of the jupyter notebook has to be restarted in order for the pymongo to take effect of the loaded dnspython.

Solution 4:[4]

In requirements.txt, replace pymongo with pymongo[tls,srv], as mentioned here.

Solution 5:[5]

I got stuck with the same problem and tried

pip install dnspython==2.0.0

This is the latest version from https://pypi.org/project/dnspython/

It worked :D

Solution 6:[6]

you can use mongo:// instead of mongodb+srv://

Solution 7:[7]

May be the protocol, your URI should start with:

mongo+srv instead of mongo+src

If it still not working please put a pip list with the versions of PyMongo and dnspython (and version of python that you are using)

Solution 8:[8]

I had the same problem on Ubuntu 18 but since I am using Anaconda I just tried

Conda install dns python

I had an IPython running, it did not work while the same instance was open but when I restarted that instance it worked.

On a different machine using

Conda install dns python

and it worked but I had to restart my machine altogether due to a different reason before testing it

Solution 9:[9]

pip install dnspython

dnspython is a DNS toolkit for Python. It supports almost all record types. It can be used for queries, zone transfers, and dynamic updates. It supports TSIG authenticated messages and EDNS0.

Solution 10:[10]

I had the same issue and found the following line.

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

It worked for me.

Sources

This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.

Source: Stack Overflow

Solution Source
Solution 1
Solution 2 KetZoomer
Solution 3 addicted
Solution 4 alter123
Solution 5 Noobajaxpython
Solution 6 msklc
Solution 7 Fernando Byn
Solution 8 Dharman
Solution 9 MD SHAYON
Solution 10 Oshidi