Solución de problemas7 min de lectura

Missing dependencies for SOCKS support: cómo corregirlo

Corrige el error Missing dependencies for SOCKS support en Python Requests, pip y HTTPX: instala requests[socks] o limpia la variable ALL_PROXY que lo provoca.

En esta página

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 vesCausaSolución
requests.exceptions.InvalidSchema: Missing dependencies for SOCKS support. y tu código define un proxy SOCKSPySocks no se puede importar desde este PythonSolución 1: python -m pip install "requests[socks]"
El mismo error, pero tu código no define ningún proxyALL_PROXY u otra variable de proxy contiene una URL SOCKSSolució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 variableSolució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 PySocksSolución 4: cámbiale el nombre
ImportError: Using SOCKS proxy, but the 'socksio' package is not installed.HTTPX necesita socksio, no PySockspython -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

sh
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:

sh
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:

sh
env | grep -i _proxy

En 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_proxy definida y ALL_PROXY vacía, el error se mantuvo. Vaciar all_proxy lo eliminó incluso con ALL_PROXY todavía definida. Vacía las dos.
  • ALL_PROXY es un valor de reserva. Con HTTP_PROXY definida además con un proxy HTTP, una petición a una URL http:// probó ese proxy y nunca llegó al código SOCKS.
  • El código puede desentenderse del entorno. session.trust_env = False devolvió 200 con ALL_PROXY todavía definida, y también añadir el host a NO_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:

code
$ 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:

sh
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 primeroPySocks instaladoResultadoLa comprobación imprime
socks.pySíAttributeErrortu socks.py
socks/ con __init__.pySíAttributeErrortu socks/__init__.py
socks/ sin __init__.pySíFunciona, estado 200PySocks en site-packages
socks/ sin __init__.pyNoAttributeError, no InvalidSchemaNone

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:

code
ImportError: Using SOCKS proxy, but the 'socksio' package is not installed. Make sure to install httpx using `pip install httpx[socks]`.
sh
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 solo ALL_PROXY o all_proxy en el entorno. Se lanza al construir el cliente: con ALL_PROXY, httpx.Client() sin argumentos falló antes de cualquier petición.
  • Una ALL_PROXY vacía y trust_env=False dieron 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ó lanzando InvalidSchema.

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.