-
-
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() |
I use Win11, and first it didn't find the directory, so I created the folder 'C:\Program Files\Common Files\SSL' manually.
Then, I'm having this error - ideas?
Traceback (most recent call last):
File "C:...\certif.py", line 44, in
main()
File "C:...\certif.py", line 38, in main
os.symlink(relpath_to_certifi_cafile, openssl_cafile)
PermissionError: [WinError 5] Access is denied: '..\..\..\...\venv\lib\site-packages\certifi\cacert.pem' -> 'cert.pem'
Edit: I was too quick to post. It failed when running from PyCharm but then worked when running it via Powershell as admin
thank you
Thank you .. helped a lot
Thanks a lot !!
Ty
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()
Thank you!
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?
@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
Still getting error, @arkahome , could you please help to fix the issue,
-- pip install --upgrade certifi9-5094-4f12-93b1-ace18c7ce134
Traceback (most recent call last):
File "", line 198, in run_module_as_main
File "", line 88, in run_code
File "c:\Python_FinV30\venv\Lib\site-packages\pip_main.py", line 24, in
sys.exit(main())
^^^^^^^
File "c:\Python_FinV30\venv\Lib\site-packages\pip_internal\cli\main.py", line 78, in main
command = create_command(cmd_name, isolated=("--isolated" in cmd_args))
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "c:\Python_FinV30\venv\Lib\site-packages\pip_internal\commands_init.py", line 114, in create_command
module = importlib.import_module(module_path)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "C:\Users\admin\AppData\Local\Programs\Python\Python312\Lib\importlib_init.py", line 90, in import_module
return _bootstrap._gcd_import(name[level:], package, level)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "", line 1387, in _gcd_import
File "", line 1360, in _find_and_load
File "", line 1331, in _find_and_load_unlocked
File "", line 935, in _load_unlocked
File "", line 995, in exec_module
File "", line 488, in _call_with_frames_removed
File "c:\Python_FinV30\venv\Lib\site-packages\pip_internal\commands\install.py", line 16, in
from pip._internal.cli.req_command import (
File "c:\Python_FinV30\venv\Lib\site-packages\pip_internal\cli\req_command.py", line 18, in
from pip._internal.index.collector import LinkCollector
File "c:\Python_FinV30\venv\Lib\site-packages\pip_internal\index\collector.py", line 31, in
from pip.vendor import requests
File "c:\Python_FinV30\venv\Lib\site-packages\pip_vendor\requests_init.py", line 146, in
from . import packages, utils
File "c:\Python_FinV30\venv\Lib\site-packages\pip_vendor\requests\utils.py", line 24, in
from . import certs
File "", line 1360, in _find_and_load
File "", line 1331, in _find_and_load_unlocked
File "", line 935, in _load_unlocked
File "c:\Python_FinV30\venv\Lib\site-packages\wrapt\importer.py", line 185, in _self_exec_module
notify_module_loaded(module)
File "c:\Python_FinV30\venv\Lib\site-packages\wrapt\importer.py", line 118, in notify_module_loaded
hook(module)
File "c:\Python_FinV30\venv\Lib\site-packages\certifi_win32\wrapt_pip.py", line 35, in apply_patches
import certifi
File "", line 1360, in _find_and_load
File "", line 1331, in _find_and_load_unlocked
File "", line 935, in _load_unlocked
File "c:\Python_FinV30\venv\Lib\site-packages\wrapt\importer.py", line 185, in _self_exec_module
notify_module_loaded(module)
File "c:\Python_FinV30\venv\Lib\site-packages\wrapt\importer.py", line 118, in notify_module_loaded
hook(module)
File "c:\Python_FinV30\venv\Lib\site-packages\certifi_win32\wrapt_certifi.py", line 26, in apply_patches
if not verify_combined_pem():
^^^^^^^^^^^^^^^^^^^^^
File "c:\Python_FinV30\venv\Lib\site-packages\certifi_win32\wincerts.py", line 65, in verify_combined_pem
with open(certifi_pem()) as certifi_pem_handle:
^^^^^^^^^^^^^^^^^^^
FileNotFoundError: [Errno 2] No such file or directory: 'c:\Python_FinV30\venv\Lib\site-packages\certifi\cacert.pem'Traceback (most recent call last):
File "c:\Python_FinV30\install_certifi.py", line 44, in
main()
File "c:\Python_FinV30\install_certifi.py", line 24, in main
subprocess.check_call([sys.executable,
File "C:\Users\admin\AppData\Local\Programs\Python\Python312\Lib\subprocess.py", line 413, in check_call
raise CalledProcessError(retcode, cmd)
subprocess.CalledProcessError: Command '['c:\Python_FinV30\venv\Scripts\python.exe', '-E', '-s', '-m', 'pip', 'install', '--upgrade', 'certifi']' returned non-zero exit status 1.
Great, it solves the problem directly!
perfect!! thanks