我正在尝试将我们的 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?
解压后的 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 恢复为不可嵌入版本的行为。