问题
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
?
回答1:
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.
来源:https://stackoverflow.com/questions/44443254/python-embeddable-zip-file-doesnt-include-lib-site-packages-in-sys-path