shiv icon indicating copy to clipboard operation
shiv copied to clipboard

support for packages with a .pth file

Open sdementen opened this issue 3 years ago • 3 comments

When creating a pyz file with dependencies "requests pip_system_certs", the file "pip_system_certs.pth" extracted in the ~/.shiv/pyzfolder/site-packages is not handled (tested by running import requests; requests.get("https://some.website.needing.system.certificate.store") which triggers a '[SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed: unable to get local issuer certificate (_ssl.c:1129)' error)

Would it be possible to make the ~/.shiv/pyzfolder/site-packages folder be considered as one of the directory with .pth that are handled ?

Or automatically run the following code (will handle the .pth files in the folder) during the bootstrap ?

import site
site.addsitedir("~/.shiv/pyzfolder/site-packages")
site.main()

sdementen avatar Aug 01 '22 13:08 sdementen

Another option would be to set https://docs.python.org/3/using/cmdline.html#envvar-PYTHONUSERBASE to the uncompressed folder in .shiv but this would require to rename somewhat the uncompressed folder to make it work (eg on windows, the folder should be named ~/.shiv/name-of-folder/Python310/site-packages (instead of ~/.shiv/name-of-folder/site-packages and PYTHONUSERBASE should be set to ~/.shiv/name-of-folder.

sdementen avatar Aug 02 '22 07:08 sdementen

Hi @sdementen,

PYZ files created by shiv should already be respecting .pth files, as we use site.addsitedir to evaluate the custom site-packages directory: https://github.com/linkedin/shiv/blob/4d273b2ccbb929cc865feea78978ebf0daa9f032/src/shiv/bootstrap/init.py#L211-L213

lorencarvalho avatar Aug 04 '22 21:08 lorencarvalho

Great! But it was not working on my side. Does it work for you? I wonder if we are not missing a call to site.main() after adding the path

sdementen avatar Aug 05 '22 06:08 sdementen