如何在Qt C++应用中集成Anaconda Python3.6且不使用其Qt版本
当然可以集成Anaconda的Python 3.6同时保留你自定义的Qt 5.9.1版本——核心问题是Anaconda的环境路径干扰了Qt Creator的库查找顺序,我们可以通过以下几个步骤解决:
1. 确认Qt Creator使用正确的Qt套件
首先检查你当前使用的开发套件是否指向你的Qt 5.9.1:
- 打开Qt Creator,依次点击
Tools→Options→Kits - 在
Kits列表里找到你正在使用的套件,查看Qt Version字段,确保它是你手动安装的Qt 5.9.1,而不是Anaconda自动检测到的Qt 5.6 - 如果Anaconda的Qt被错误加入到套件列表,你可以选中它后点击
Remove移除,避免被误选
2. 调整.pro文件的库链接优先级
在你的项目.pro文件中,先指定本地Qt 5.9.1的库路径,再添加Anaconda的Python库,确保编译器优先查找你自定义的Qt库:
# 先添加本地Qt 5.9.1的库路径(替换成你实际的安装路径) LIBS += -L/opt/Qt5.9.1/5.9.1/gcc_64/lib -lQt5Core -lQt5Gui -lQt5Widgets # 再添加Anaconda的Python库 INCLUDEPATH += /home/[username]/anaconda3/include/python3.6m LIBS += -L/home/[username]/anaconda3/lib/ -lpython3.6m
你也可以利用Qt的内置变量$$QT_LIB_DIR来自动获取当前套件的Qt库路径,这样更灵活:
LIBS += -L$$QT_LIB_DIR -lQt5Core -lQt5Gui -lQt5Widgets
3. 隔离Anaconda的环境变量影响
Anaconda会自动把自身的bin和lib路径加入系统PATH和LD_LIBRARY_PATH,导致Qt Creator启动时优先加载Anaconda的库。你可以通过启动脚本临时移除这些路径:
在Linux下创建一个启动Qt Creator的脚本(比如qtcreator_custom.sh):
#!/bin/bash # 移除Anaconda的路径(替换成你的Anaconda安装路径) export PATH=$(echo $PATH | sed -e 's|/home/[username]/anaconda3/bin||' -e 's|::|:|g' -e 's|^:||' -e 's|:$||') export LD_LIBRARY_PATH=$(echo $LD_LIBRARY_PATH | sed -e 's|/home/[username]/anaconda3/lib||' -e 's|::|:|g' -e 's|^:||' -e 's|:$||') # 启动Qt Creator(替换成你的Qt Creator安装路径) /opt/QtCreator/bin/qtcreator
给脚本添加执行权限后,用它来启动Qt Creator,这样就不会受到Anaconda路径的干扰了。
4. 使用rpath强制指定库加载顺序
如果上述方法仍有问题,可以通过rpath参数让程序运行时优先加载你指定的Qt库:
在.pro文件中添加:
# 优先加载本地Qt库 QMAKE_RPATHDIR += $$QT_LIB_DIR # 再加载Anaconda的Python库 QMAKE_RPATHDIR += /home/[username]/anaconda3/lib # 确保rpath优先级高于系统默认路径 QMAKE_LFLAGS += "-Wl,--disable-new-dtags"
这个设置会在编译时把指定的库路径嵌入到可执行文件中,确保运行时优先查找这些路径。
额外注意事项
如果你调用的Python神经网络代码依赖Anaconda中的某些库(比如PyTorch/TensorFlow),不用担心——这些库的依赖不会影响Qt的编译,只要我们确保编译阶段优先使用自定义Qt库即可,Python运行时会正常加载Anaconda环境中的依赖。
内容的提问来源于stack exchange,提问作者Florian Blume

