Missing dependencies for SOCKS support significa que Requests recibió una URL de proxy SOCKS, como socks5:// o socks5h://, y no pudo hacer import socks, el módulo que instala PySocks, en el Python que se está ejecutando. Requests lo lanza antes de abrir ninguna conexión, así que todavía no se ha contactado con el proxy.
La URL del proxy no tiene por qué estar en tu código: Requests también la toma de ALL_PROXY o all_proxy en el entorno. Y pip funciona con su propia copia integrada de Requests, así que con esa variable definida pip install pysocks se detiene con el mismo mensaje.
| Lo que ves | Causa | Solución |
|---|---|---|
requests.exceptions.InvalidSchema: Missing dependencies for SOCKS support. y tu código define un proxy SOCKS | PySocks no se puede importar desde este Python | Solución 1: python -m pip install "requests[socks]" |
| El mismo error, pero tu código no define ningún proxy | ALL_PROXY u otra variable de proxy contiene una URL SOCKS | Solución 2: elimina la variable o instala PySocks |
ERROR: Could not install packages due to an OSError: Missing dependencies for SOCKS support. | pip leyó la misma variable | Solución 3: vacíala solo para ese comando |
AttributeError: module 'socks' has no attribute 'PROXY_TYPE_SOCKS5' | Se importa tu propio socks.py o tu paquete socks/ en lugar de PySocks | Solución 4: cámbiale el nombre |
ImportError: Using SOCKS proxy, but the 'socksio' package is not installed. | HTTPX necesita socksio, no PySocks | python -m pip install "httpx[socks]" |
Los resultados siguientes se registraron el 5 de octubre de 2026 con Requests 2.34.2, HTTPX 0.28.1, pip 26.2.1, PySocks 1.7.1 y socksio 1.0.0 en Python 3.13.5 y 3.14.4, con un entorno virtual nuevo para cada caso. Las dos versiones de Python dieron los mismos resultados.
Solución 1: instala PySocks en el Python que ejecuta tu código
python -m pip install "requests[socks]"El extra añade un solo paquete, PySocks, cuyo módulo importable se llama socks. Instalar pysocks por su nombre también funciona. Escribe python -m pip y no pip a secas: así se instala en el intérprete que arranca el comando python, mientras que un pip suelto puede pertenecer a otro entorno. En el laboratorio, con el pip del PATH apuntando a un segundo entorno virtual, pip install "requests[socks]" imprimió Successfully installed PySocks-1.7.1 y el script siguió lanzando el mismo error.
Comprueba el intérprete en ejecución:
python -c "import socks, sys; print(sys.executable, socks.__file__)"Imprime el intérprete y el archivo al que se resolvió import socks, que debería ser socks.py dentro del site-packages de ese intérprete. ModuleNotFoundError: No module named 'socks' significa que a este Python le falta PySocks.
Solución 2: tú no definiste ningún proxy
Cuando no pasas proxies, Requests los construye a partir del entorno. Su documentación nombra http_proxy, https_proxy, no_proxy y all_proxy, además de las variantes en mayúsculas. Lista lo que hereda tu proceso:
env | grep -i _proxyEn el laboratorio, un script sin proxy en su código lanzó el error con solo ALL_PROXY=socks5://127.0.0.1:1080 definida, y de nuevo con solo all_proxy en minúsculas. HTTP_PROXY con una URL socks5:// hizo lo mismo. El issue #3516 de Requests es este caso: el entorno de quien lo reportó contenía all_proxy, y el código se rompió al actualizar a Requests 2.11, donde, según un mantenedor, empezó el soporte de all_proxy.
Si quieres el proxy SOCKS, aplica la solución 1. Si no, elimina la variable allí donde se define, por ejemplo en un perfil de shell o en una imagen de contenedor. Cuatro detalles del laboratorio:
- Un valor vacío cuenta como no definido.
ALL_PROXY=dio una petición directa y estado 200. - Las minúsculas ganan. Con
all_proxydefinida yALL_PROXYvacía, el error se mantuvo. Vaciarall_proxylo eliminó incluso conALL_PROXYtodavía definida. Vacía las dos. ALL_PROXYes un valor de reserva. ConHTTP_PROXYdefinida además con un proxy HTTP, una petición a una URLhttp://probó ese proxy y nunca llegó al código SOCKS.- El código puede desentenderse del entorno.
session.trust_env = Falsedevolvió 200 conALL_PROXYtodavía definida, y también añadir el host aNO_PROXY.
Variables de entorno de proxy enumera qué variables lee cada cliente, y la guía de proxy en Python Requests explica trust_env.
Solución 3: pip falla con Missing dependencies for SOCKS support
pip descarga mediante una copia integrada (vendored) de Requests y lee las mismas variables. Con all_proxy o ALL_PROXY apuntando a una URL SOCKS, en un entorno virtual nuevo:
$ python -m pip install "requests[socks]"
WARNING: There was an error checking the latest version of pip.
ERROR: Could not install packages due to an OSError: Missing dependencies for SOCKS support.pip download y pip index versions terminaron en cambio con una traza cuya última línea era pip._vendor.requests.exceptions.InvalidSchema: Missing dependencies for SOCKS support. Vacía las variables solo para ese comando:
ALL_PROXY= all_proxy= python -m pip install "requests[socks]"env -u ALL_PROXY -u all_proxy delante del comando también funcionó. Vaciar solo ALL_PROXY no bastó, porque all_proxy seguía definida.
Después decide si la variable debe seguir exportada. Con PySocks instalado, Requests usó el proxy de ALL_PROXY y devolvió 200 a través del servidor SOCKS del laboratorio. pip no: pip 26.2.1 se detuvo con TypeError: PoolKey.__new__() got an unexpected keyword argument 'key_proxy_ssl_context', mientras que pip 25.1.1 instaló un paquete a través del mismo proxy. Con pip 26.2.1, sigue vaciando la variable en los comandos de pip, o define el proxy solo para el programa que lo necesita.
Solución 4: AttributeError: module 'socks' has no attribute 'PROXY_TYPE_SOCKS5'
Aquí import socks encontró algo, pero no PySocks. Python busca primero en el directorio del script, o en el directorio actual con python -c y python -m, y añade site-packages al final, así que un archivo o una carpeta tuyos llamados socks ganan. La comprobación de la solución 1 muestra qué se importó:
| En el directorio donde Python busca primero | PySocks instalado | Resultado | La comprobación imprime |
|---|---|---|---|
socks.py | Sí | AttributeError | tu socks.py |
socks/ con __init__.py | Sí | AttributeError | tu socks/__init__.py |
socks/ sin __init__.py | Sí | Funciona, estado 200 | PySocks en site-packages |
socks/ sin __init__.py | No | AttributeError, no InvalidSchema | None |
Cambia el nombre del archivo o de la carpeta. En la última fila, una carpeta normal llamada socks convirtió el error de dependencia ausente en el AttributeError, así que después de renombrarla sigues necesitando la solución 1.
HTTPX: Using SOCKS proxy, but the 'socksio' package is not installed
HTTPX tiene su propia dependencia para SOCKS. Sin ella, HTTPX 0.28.1 lanza:
ImportError: Using SOCKS proxy, but the 'socksio' package is not installed. Make sure to install httpx using `pip install httpx[socks]`.python -m pip install "httpx[socks]"Eso instaló socksio 1.0.0, y la misma petición devolvió 200 a través del proxy. Las demás soluciones también se aplican:
- El error aparece con
proxy="socks5://..."en el código y con soloALL_PROXYoall_proxyen el entorno. Se lanza al construir el cliente: conALL_PROXY,httpx.Client()sin argumentos falló antes de cualquier petición. - Una
ALL_PROXYvacía ytrust_env=Falsedieron cada una un 200 directo. - Las dos bibliotecas no son intercambiables. HTTPX con solo PySocks instalado siguió lanzando el
ImportError, y Requests con solo socksio siguió lanzandoInvalidSchema.
Para comprobar la importación, sustituye socks por socksio en el comando de la solución 1. La guía de proxies async en HTTPX tiene una configuración completa del cliente.
Cuando ya importa: elige socks5:// o socks5h:// a propósito
Un error distinto a estas alturas es un avance: con PySocks instalado y nada escuchando en el puerto del proxy, Requests lanzó ConnectionError con Connection refused, un problema de red.
La siguiente decisión es el esquema. En Requests, socks5:// resuelve el nombre de host en tu máquina y socks5h:// lo envía al proxy, mientras que HTTPX envía el nombre de host con ambos. socks5 vs socks5h: qué envían realmente seis clientes al proxy recoge los resultados registrados de cada cliente, y Proxies HTTP vs SOCKS5 ayuda si todavía estás eligiendo protocolo.
Cómo se probó
En Ubuntu 26.04.1, con todo en 127.0.0.1: python -m http.server como destino y un pequeño relé SOCKS5 que registra cada petición que recibe. Cada uno de los 47 casos se ejecutó en las dos versiones de Python en un entorno virtual nuevo, un directorio de trabajo sin archivos ajenos al caso y un directorio personal vacío, sin más variables de proxy que las nombradas en ese caso. No se usó ninguna cuenta de proxy; el único tráfico saliente fue el de pip hacia PyPI. En todos los casos que fallaron, el relé no registró ninguna conexión.
El archivo del laboratorio contiene el script de ejecución, el relé SOCKS5, el README y los resultados registrados.
No se probó: macOS ni Windows, SOCKS4 ni proxies SOCKS con autenticación, versiones anteriores de Requests y HTTPX, ni instaladores distintos de pip.
ipvolt es un servicio de proxies para desarrolladores que todavía no está abierto; únete a la lista de acceso anticipado y recibirás un solo correo cuando abra.
Fuentes y lecturas adicionales
Referencias técnicas usadas para esta guía. Consulta la documentación de tu versión instalada y la configuración compatible de tu proveedor.