Python Embeddable Zip文件不包含sys.path中的lib / site-packages

时间:2017-06-08 18:37:49

标签: python python-3.6

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

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

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

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

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

2 个答案:

答案 0 :(得分:3)

在解压缩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恢复为非嵌入版本的行为。

答案 1 :(得分:0)

先前的答案对我们不起作用,我们不得不修改._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时没有注释“导入站点”,在sys.path中看到的只是python38.zip和python文件夹路径,根本没有站点包。

因此,对于所有可能在这里冒险的人,如果取消对“导入站点”行的注释不适合您,则尝试显式添加所需的路径。

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

python38.zip/site-packages

这在Windows上也有效,自动将'/'替换为'\',并且站点程序包仍位于sys路径中并且可用