QT 项目引用相同库不同版本冲突

Ubuntu 系统里面,QT 写了一个项目 其中一个功能是调用Python代码,
需要引入Python解释器,引入Python包如下

include_directories(/usr/include/python3.8)
set(PYTHON_LIBRARIES "/home/dh/pan1/anaconda3/envs/slowfast/lib/libpython3.8.so")
add_executable(main main.cpp)
target_link_libraries(main ${PYTHON_LIBRARIES})

此Python目录下里面也安装了包 qt 4.9 ;QT原本引用了包 qt 5.14,导致QT引用冲突。请问这种情况下QT项目怎么处理不报错。

1、在 Python 中创建虚拟环境:使用 venv 模块在 Python 中创建一个虚拟环境。虚拟环境可以使您在不影响系统中其他 Python 应用程序的情况下安装和管理 Python 包。你可以在虚拟环境中安装任何版本的 Python 包,而不会影响系统中其他 Python 包的版本。

3、在 Qt 项目中设置 Python 环境变量:在 Qt 项目中,可以通过设置环境变量来指定要使用的 Python 版本和路径。例如,在 Qt Creator 中,可以在项目设置中添加以下行:

PYTHONHOME=/path/to/python/env
PATH=/path/to/python/env/bin:$PATH

3、在 Qt 项目中使用 Python 的 subprocess 模块运行脚本:如果您只是在 Qt 项目中使用 Python 脚本执行一些特定的任务(例如数据分析),则可以考虑在 Qt 项目中使用 Python 的 subprocess 模块,而不是直接从 Qt 项目中调用 Python 代码。这样,您可以在子进程中运行 Python 脚本,并将输出传递回 Qt 项目。

本人参考gpt部分内容调写;
在Ubuntu系统中,可以使用虚拟环境(Virtual Environment)来管理Python包,从而避免不同版本的包之间的冲突。你可以按照以下步骤来解决问题:

  1. 在Python代码所在的目录下创建一个虚拟环境。可以使用以下命令:

    python3 -m venv env
    

    这将在当前目录下创建一个名为“env”的虚拟环境。

  2. 激活虚拟环境。可以使用以下命令:

    source env/bin/activate
    

    这将激活名为“env”的虚拟环境。

  3. 在虚拟环境中安装所需的Python包。可以使用以下命令:

    pip install package_name
    

    其中,package_name是你需要安装的Python包名称。你需要在虚拟环境中安装你需要的所有Python包。

  4. 在QT项目中,使用虚拟环境中安装的Python解释器来调用Python代码。可以使用以下代码来指定Python解释器路径:

    QProcess process;
    process.start("/path/to/env/bin/python", QStringList() << "/path/to/python/script.py");
    

    其中,/path/to/env是虚拟环境的路径,/path/to/python/script.py是你需要调用的Python脚本路径。

使用虚拟环境的好处是,不同的项目可以使用不同的虚拟环境,并且不同的虚拟环境之间不会产生冲突。这样可以避免因为不同版本的Python包之间的冲突导致的问题。

该回答引用ChatGPT

如有疑问,可以回复我!

在 Ubuntu 系统中,如果 QT 项目中需要调用 Python 代码,可以通过以下步骤解决 Python 包冲突问题:

使用 conda 环境:根据你的描述,你在 "/home/dh/pan1/anaconda3/envs/slowfast" 目录下安装了 Python 3.8 环境,因此可以在该环境中使用 conda 安装需要的 Python 包,避免与 QT 的默认包冲突。可以在 conda 环境中使用以下命令安装需要的 Python 包:

conda activate slowfast
conda install <package-name>

修改 CMakeLists.txt:在 CMakeLists.txt 中使用以下方式链接 Python 库文件:

find_package(Python3 COMPONENTS Interpreter Development REQUIRED)
include_directories(${Python3_INCLUDE_DIRS})
target_link_libraries(main ${Python3_LIBRARIES})

通过使用 find_package 和 target_link_libraries 命令来找到并链接 Python 库文件,从而避免手动指定 Python 库文件的路径,也可以避免出现包冲突的问题。

修改系统环境变量:将 Python 3.8 的库文件路径添加到系统环境变量中,以避免与 QT 的默认包冲突。可以使用以下命令将 Python 3.8 的库文件路径添加到系统环境变量中:

export LD_LIBRARY_PATH=/home/dh/pan1/anaconda3/envs/slowfast/lib:$LD_LIBRARY_PATH

这样在运行 QT 项目时,系统会先搜索 Python 3.8 的库文件路径,避免与 QT 的默认包冲突。

总之,在 Ubuntu 系统中,可以通过 conda 环境、修改 CMakeLists.txt 或者修改系统环境变量的方式来解决 QT 项目中 Python 包冲突的问题。

不知道你这个问题是否已经解决, 如果还没有解决的话:

如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^