我正在尝试将我们的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
?
答案 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路径中并且可用