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,“/”被自动正确地替换为“\”,站点包仍在系统路径中并且可用
我正在尝试将我们的 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
?
解压 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,“/”被自动正确地替换为“\”,站点包仍在系统路径中并且可用