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.