Skip to content

Instantly share code, notes, and snippets.

@marschhuynh
Created January 6, 2019 03:59
Show Gist options
  • Save marschhuynh/31c9375fc34a3e20c2d3b9eb8131d8f3 to your computer and use it in GitHub Desktop.
Save marschhuynh/31c9375fc34a3e20c2d3b9eb8131d8f3 to your computer and use it in GitHub Desktop.
# 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()
@arkahome
Copy link

Just change this part to not get FileNotFound Error :

FileNotFoundError: [WinError 2] The system cannot find the file specified: 'C:\Program Files\Common Files\ssl'

    try:
        os.chdir(openssl_dir)
    except FileNotFoundError:
        os.makedirs(openssl_dir)
        os.chdir(openssl_dir)

Full Code :

# 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
    try:
        os.chdir(openssl_dir)
    except FileNotFoundError:
        os.makedirs(openssl_dir)
        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()

@lrayne
Copy link

lrayne commented Apr 14, 2024

Thank you!

@sbrunswi
Copy link

I have been trying to run this but I get this error:

/Applications/Python\ 3.12/Install\ Certificates.command ; exit;
sbrunswi@ppi-gq4jmwx5 ~ % /Applications/Python\ 3.12/Install\ Certificates.command ; exit;
 -- pip install --upgrade certifi
Requirement already satisfied: certifi in /Library/Frameworks/Python.framework/Versions/3.12/lib/python3.12/site-packages (2024.2.2)

[notice] A new release of pip is available: 23.2.1 -> 24.0
[notice] To update, run: pip3 install --upgrade pip
 -- removing any existing file or link
 -- creating symlink to certifi certificate bundle
Traceback (most recent call last):
  File "<stdin>", line 44, in <module>
  File "<stdin>", line 38, in main
PermissionError: [Errno 13] Permission denied: '../../lib/python3.12/site-packages/certifi/cacert.pem' -> 'cert.pem'

Saving session...
...copying shared history...
...saving history...truncating history files...
...completed.

Can anybody help?

@wyankx
Copy link

wyankx commented May 10, 2024

@sbrunswi try to run this script with sudo
If that doesn't help, try to use chmod -R 777 {path to your site-packages folder}/certifi
I'm not sure, but I hope it helps

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment