brew instalación de Python 3.6.1: error en la verificación del certificado

Instalé Python 3.6 usando

brew install python3

e intentó descargar un archivo con six.moves.urllib.request.urlretrieve desde un https, pero arroja el error

ssl.SSLError: [SSL: CERTIFICATE_VERIFY_FAILED] error en la verificación del certificado (_ssl.c: 749)

En la instalación de Python (de .pkg), el archivo README indica que es necesario ejecutar Install Certificates.command después de la instalación para

  1. instalar certifi
  2. enlace simbólico la ruta de certify para certify ruta

Para poder utilizar certificados.

Sin embargo, en brew install, este archivo no existe y parece que no se ejecuta.

Parece que, por alguna razón, Brew no ha ejecutado Install Certificates.command que viene en el paquete Python3 para Mac. La solución a este problema es ejecutar el siguiente script (copiado de Install Certificates.command ) después de brew install python3 :

 # install_certifi.py # # sample script to install or update a set of default Root Certificates # for the ssl module. Uses the certificates provided by the certifi package: # https://pypi.python.org/pypi/certifi import os import os.path import ssl import stat import subprocess import sys STAT_0o775 = ( stat.S_IRUSR | stat.S_IWUSR | stat.S_IXUSR | stat.S_IRGRP | stat.S_IWGRP | stat.S_IXGRP | stat.S_IROTH | stat.S_IXOTH ) def main(): openssl_dir, openssl_cafile = os.path.split( ssl.get_default_verify_paths().openssl_cafile) print(" -- pip install --upgrade certifi") subprocess.check_call([sys.executable, "-E", "-s", "-m", "pip", "install", "--upgrade", "certifi"]) import certifi # change working directory to the default SSL directory os.chdir(openssl_dir) relpath_to_certifi_cafile = os.path.relpath(certifi.where()) print(" -- removing any existing file or link") try: os.remove(openssl_cafile) except FileNotFoundError: pass print(" -- creating symlink to certifi certificate bundle") os.symlink(relpath_to_certifi_cafile, openssl_cafile) print(" -- setting permissions") os.chmod(openssl_cafile, STAT_0o775) print(" -- update complete") if __name__ == '__main__': main() 

Mi solución para Mac OS X:

1) Actualice a Python 3.6.5 utilizando la aplicación nativa. Instalador de Python descargado del sitio web oficial de Python en https://www.python.org/downloads/

Descubrí que este instalador se encarga de actualizar los enlaces y enlaces simbólicos para el nuevo Python mucho mejor que Homebrew.

2) Instale un nuevo certificado usando “./Install Certificates.command” que se encuentra en el directorio actualizado de Python 3.6

cd “/ Applications / Python 3.6 /” sudo “./Install Certificates.command”