Python's requests "Missing dependencies for SOCKS support" when using SOCKS5 from Terminal
This means that requests is using socks as a proxy and that socks is not installed.
Just run
pip install pysocks
I had the same issue with conda and requests 2.11 (I work in a Ubuntu VM behind a corporate proxy).
This issue helped me. I changed my environment variable all_proxy
(which was originally set to a SOCK proxy socks://....
) to the https version in my .bashrc file :
export all_proxy="https://<proxy>:<port>/"
and now it works.
In Ubuntu you can run :unset all_proxy && unset ALL_PROXY
I added the requests[socks]>=2.10.0
to my requirements.txt, updated my https_proxy
env variable, and came across the above error. I then tried a regular pip install requests[socks]
after resetting the https_proxy
env variable and PySocks
was installed. I'm not sure why the pip install -Ur requirements.txt
failed to install PySocks the first time.
After that, I was able to make a request in python using the socks proxy.
It looks like your socks server is not behaving. I would see if you, or your admin, could watch the logs and see what the machine is complaining about.
I also stumbled upon this issue while doing a simple pip install -U pip
, but information I found from your question helped me resolved my issue. I am on Mac OS X.
As you have pointed out, adapters.py from the requests
package was trying to do this:
try:
from .packages.urllib3.contrib.socks import SOCKSProxyManager
except ImportError:
def SOCKSProxyManager(*args, **kwargs):
raise InvalidSchema("Missing dependencies for SOCKS support.")
So it seems sensible to look for the place of definition of SOCKSProxyManager. It seems to be in a "contrib" module in urllib3 and not installed alongside urllib3 by default. The docstring of that module says:
This module contains provisional support for SOCKS proxies from within
urllib3. This module supports SOCKS4 (specifically the SOCKS4A variant) and
SOCKS5. To enable its functionality, either install PySocks or install this
module with the ``socks`` extra.
The instructions of the pip docs says this about setuptools extras:
6. Install a package with setuptools extras.
$ pip install SomePackage[PDF]
$ pip install git+https://git.repo/some_pkg.git#egg=SomePackage[PDF]
$ pip install SomePackage[PDF]==3.0
$ pip install -e .[PDF]==3.0 # editable project in current directory
So I followed the instructions and did:
$ pip install 'urllib3[socks]'
I then continued with pip install -U pip
, which was what I was supposed to be doing, and now it works.
I wonder how many people got tricked-up by the square brackets, as Bash and other shells often treat it as a special character, which needs to be escaped for it to reach the invoked program (in this case, pip).