Python 可嵌入 Zip 文件在 sys.path 中不包含 lib/site-packages

Jef*_*f G 6 python python-3.6

我正在尝试将我们的 Python 版本从 3.4 更新到 3.6。我们将 Python 嵌入到 C++ 应用程序中,因此使用新的(自 Python 3.5 起)Windows x86 可嵌入 zip 文件似乎是合乎逻辑的。但是,我们的应用程序无法执行,因为“lib/site-packages”没有被添加到sys.path变量中。我已经确认在我的机器上安装 Python 3.6 并从安装位置运行后,该sys.path变量包含(相对于 python 目录):

'...\\python36.zip'
'...\\DLLs'
'...\\lib'
'...'
'...\\lib\\site-packages'
Run Code Online (Sandbox Code Playgroud)

但是,当我在同一台机器上从可嵌入的 zip 文件运行时,该sys.path变量包含(相对于 python 目录):

'...\\python36.zip'
'...'
'...\\\n'
Run Code Online (Sandbox Code Playgroud)

在这两种情况下,“lib/site-packages”目录都存在于 Python 目录中。我也没有定义 PYTHONPATH 环境变量。有谁知道如何让可嵌入的 zip 文件与已安装的版本相同,这取决于它如何确定sys.path

Jef*_*f G 7

解压后的 Python 可嵌入 zip 文件,python36._pth在根目录中有一个名为的文件 。该文件包含以下文本:

# Uncomment to run site.main() automatically
#import site
Run Code Online (Sandbox Code Playgroud)

正如注释所示,只需import site通过删除“#”字符来取消对语句的注释。这样做之后,该sys.path变量包含:

'...\\python36.zip'
'...'
'...\\\n'
'...\\lib\\site-packages'
Run Code Online (Sandbox Code Playgroud)

这仍然与安装的版本不同,但正是我在特定情况下所需要的。

开始编辑

我还发现您可以python36._pth完全删除该文件,这会将Python 恢复为不可嵌入版本的行为。