Skip to content
Advertisement

Python Embeddable Zip File Doesn’t Include lib/site-packages in sys.path

I am attempting to update our Python version from 3.4 to 3.6. We are embedding Python into a C++ application, so it seemed logical to utilize the new (since Python 3.5) Windows x86 embeddable zip file. However, our application is failing to execute because “lib/site-packages” isn’t being added to the sys.path variable. I have confirmed that after installing Python 3.6 on my machine, and running from the installed location, the sys.path variable contains (relative to the python directory):

'...\python36.zip'
'...\DLLs'
'...\lib'
'...'
'...\lib\site-packages'

However, when I run from the embeddable zip file on the same machine, the sys.path variable contains (relative to the python directory):

'...\python36.zip'
'...'
'...\n'

In both cases, the “lib/site-packages” directory exists within the Python directory. I also don’t have a PYTHONPATH environment variable defined. Does anyone know how to get the embeddable zip file to act the same as the installed version, with respect to how it determines sys.path?

Advertisement

Answer

After extracting the Python embeddable zip file, there is a file called python36._pth in the root directory. That file contains the following text:

# Uncomment to run site.main() automatically
#import site

As the comment indicates, simply uncomment the import site statement by removing the ‘#’ character. After doing so, the sys.path variable contains:

'...\python36.zip'
'...'
'...\n'
'...\lib\site-packages'

This is still different than the installed version, but is exactly what I needed in my particular case.

BEGIN EDIT

I also discovered that you can remove the python36._pth file entirely, which reverts Python to behavior of the non-embeddable version.

User contributions licensed under: CC BY-SA
9 People found this is helpful
Advertisement