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

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

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

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

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

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

在这两种情况下,"lib/site-packages" 目录都存在于 Python 目录中。我也没有 定义 PYTHONPATH 环境变量。关于如何确定 sys.path?

有谁知道如何让可嵌入的 zip 文件与安装的版本一样运行

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

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

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

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

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

开始编辑

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

之前的答案对我们不起作用,我们不得不修改._pth 文件以直接将site-packages 文件夹添加到sys.path。我们正在 windows 可嵌入 python 环境中使用 python 3.8。

所以我们的 python38._pth 文件现在看起来像这样

python38.zip
.
python38.zip\site-packages

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

要清楚,我们 运行 python 最初只有 'import site' 未注释,我们在 sys.path 中看到的只是 python38.zip 和 python 文件夹路径,根本没有站点包。

因此,如果取消对 'import site' 行的注释对您不起作用,请尝试明确添加您想要的路径。

还在我们的 ._pth 文件中尝试了以下内容

python38.zip/site-packages

这也适用于 windows,“/”被自动正确地替换为“\”,站点包仍在系统路径中并且可用