I\'m trying to interact with an API from my Python 2.7 shell using a package that relies on Python\'s requests. Thing is the remote address is blocked by my network (univers
Just unset your all_proxy
environment variable, and this should work. Also you can refer to this issue in github.
On Ubuntu you can use the following command unset all_proxy
and restart terminal
You must add socks support with python requests
library:
pip install requests[socks]
In debian 10, Python 3:
pip3 install pysocks
I faced the same issue where got the error Missing dependencies for SOCKS support.
with Anaconda Python 3.7
As conda
command was working fine, I installed pysocks
with the command conda install pysocks
This resolved the issue.
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).
In ubuntu, I do the following commands:
# Unset socks proxy
unset all_proxy
unset ALL_PROXY
# Install missing dependencies:
pip install pysocks
# Reset proxy
source ~/.bashrc