planning配置1

要解决您在构建过程中遇到的包版本冲突问题,需要在 conanfile.py 中对依赖项进行适当的调整和覆盖。下面我将逐步指导您如何修改 conanfile.py,以解决版本冲突问题。


问题分析

错误信息:

ERROR: Conflict in carma_utils/0.9.26+734dee48e2@aos/dev:
    'carma_utils/0.9.26+734dee48e2@aos/dev' requires 'aos_logging/0.13.26+734dee48e2@aos/dev' while 'runtime_utils/0.7.23+775b098324@aos/dev' requires 'aos_logging/0.13.23+775b098324@aos/dev'.
    To fix this conflict you need to override the package 'aos_logging' in your root package.

原因分析:

  • carma_utils 需要 aos_logging/0.13.26+734dee48e2@aos/dev
  • runtime_utils 需要 aos_logging/0.13.23+775b098324@aos/dev
  • 两者对 aos_logging 的版本需求不同,导致了冲突。

解决方案

步骤 1:确定使用的 aos_logging 版本

为了消除冲突,需要在根包中覆盖 aos_logging 的版本。我们有两个选择:

  • 选择 1:使用 aos_logging/0.13.26+734dee48e2@aos/dev
    • 这是 carma_utils 需要的版本。
  • 选择 2:使用 aos_logging/0.13.23+775b098324@aos/dev
    • 这是 runtime_utils 需要的版本。

建议:

  • 更新 runtime_utils 到与 carma_utils 兼容的版本,使其依赖于 aos_logging/0.13.26+734dee48e2@aos/dev
  • 这样,我们可以统一使用 aos_logging/0.13.26+734dee48e2@aos/dev,消除冲突。
步骤 2:修改 conanfile.py

在您的 conanfile.py 中,需要做以下修改:

  1. requirements 方法中,添加或修改对 aos_logging 的依赖,使用 override=True 参数。
  2. 更新 runtime_utils 到兼容的版本。
  3. 更新 aos_runtime 到使用新 runtime_utils 的版本。
修改后的 conanfile.py
from conans import ConanFile, CMake, tools
from conans.model.settings import Settings
from conan.tools.cmake import CMakeDeps
import multiprocessing
import os

class W3PnC(ConanFile):

    name = "W3PnC"
    version = "0.0.1"
    license = "-"
    url = ""
    description = ""
    settings = "os", "compiler", "build_type", "arch"
    generators = "cmake_find_package", "virtualenv", "json", "virtualrunenv"
    build_policy = "never"
    exports_sources = "*"

    # options and default options
    options = {
        "MTA":                   ["ON", "OFF"],
        "ROS":                   ["ON", "OFF"],
        "TAPE":                  ["ON", "OFF"],
        "ROS_INITIALIZATION":    ["ON", "OFF"],
        "CODE_GENERATOR":        ["yaaac", "yaaac2"],
        "MIDDLEWARE_TARGET":     ["carma_0_22"],
        "LOGGING_FRAMEWORK":     ["console", "console_and_mta"],
        "ENABLE_OBSERVER": ["ON", "OFF"],
        "ROS_CONVERTER_TOOL": ["v1", "v2"],
        "cmake_build_type": ["Debug", "RelWithDebInfo", "Release"],
        "BUILD_METHOD": ["Separate", "AOSBUILD"]
    }
    default_options = {
        "MTA":                   "OFF",
        "ROS":                   "ON",
        "TAPE":                  "OFF",
        "ROS_INITIALIZATION":    "OFF",
        "CODE_GENERATOR":        "yaaac2",
        "MIDDLEWARE_TARGET":     "carma_0_22",
        "LOGGING_FRAMEWORK":     "console",
        "ENABLE_OBSERVER": "OFF",
        "ROS_CONVERTER_TOOL": "v2",
        "cmake_build_type": "RelWithDebInfo",
        "BUILD_METHOD": "AOSBUILD"
    }

    def build_requirements(self):
        if self.options.BUILD_METHOD == "AOSBUILD":
            if self.settings.os == "Neutrino":
                self.build_requires("nv-qnx-sdp/6.0.7-alpha@bsw/dev")
                self.build_requires("ros_noetic_qnx/0.1.0@aos/dev")
            self.build_requires("serialize_sercoder/0.17.4+fd4e678266@aos/dev#73b168a837d16b26e9bd1ea15fac936f")
            self.build_requires("yaaa_cmake/0.22.29+775b098324@aos/dev")
            self.build_requires("yaaac2/0.24.50+775b098324@aos/dev")
            if self.settings.os == "Linux":
                self.build_requires("aos_dev_tools/0.19.23+bbb82fd539@aos/dev")
            if self.options.ROS == "ON":
                self.tool_requires("ros_aos/0.1.0@aos/dev#f3d10ac0cfbcd6133d7ef3bf85241f5b")
            if self.options.ROS_CONVERTER_TOOL == "v2":
                self.build_requires("cpp_ros_converter2/0.26.23+775b098324@aos/dev#830a6207d216194e52125ae3cf7c372c")
            else:
                self.build_requires("cpp_ros_converter/0.25.22+22172cbe90@aos/dev#4e948d1c20209e945667670a133031e2")
 
    def generate(self):
        if self.options.BUILD_METHOD == "AOSBUILD":
            if hasattr(self, "settings_build"):
                cmakedeps = CMakeDeps(self)
                # generate the config files for the tool require
                cmakedeps.build_context_activated.append("yaaa_cmake")
                cmakedeps.build_context_activated.append("serialize_sercoder")
                cmakedeps.build_context_activated.append("yaaac")
                cmakedeps.build_context_activated.append("cpp_ros_converter2")
                cmakedeps.build_context_activated.append("yaaac2")
                cmakedeps.generate()

    def requirements(self):
        if self.options.BUILD_METHOD == "AOSBUILD":
            # 更新 aos_runtime 到兼容版本
            self.requires("aos_runtime/0.19.26+734dee48e2@aos/dev", override=True)
            # 更新 runtime_utils 到兼容版本
            self.requires("runtime_utils/0.7.26+734dee48e2@aos/dev", override=True)
            self.requires("cpu_burner/0.0.24+bbb82fd539@aos/dev#0bd2540d8e1e2d575c58570d3a4a242f")
            self.requires("gtest/1.11.0@aos/dev#99e7d54b57615e43b1aaabfa6984c9fd")
        if self.settings.os == "Neutrino": 
            # 添加其他依赖项
            self.requires("jsoncpp/1.9.5@pjw3/dev_test")
            # ... 省略其他依赖项 ...
            self.requires("esme/0.13.36+775b098324@aos/dev")
            self.requires("log_sink_dlt/0.4.24+775b098324@aos/dev")
            self.requires("absl/20210324@aos/dev")

            self.requires("w3_xInfer/2.8.0@pjw3/dev")
            self.requires("w3_opencv/4.3.0@pjw3/dev")
        else:
            # 添加其他依赖项
            self.requires("yaml-cpp/0.7.0@aos/dev")
            # ... 省略其他依赖项 ...
            self.requires("esme/0.13.36+775b098324@aos/dev")
            self.requires("log_sink_dlt/0.4.24+775b098324@aos/dev")
            self.requires("w3_tensorrt_x86_64/8.6.10@pjw3/dev")
            self.requires("w3_cuda_x86_64/11.4.00@pjw3/dev")
            self.requires("w3_xInfer/2.8.0@pjw3/dev")

        # 覆盖 aos_logging 到指定版本
        self.requires("aos_logging/0.13.26+734dee48e2@aos/dev", override=True)
        # 如果有需要,也可以覆盖其他依赖项

    def build(self):
        cmake = CMake(self)
        for opt_name, opt_value in self.options.items():
            cmake.definitions[opt_name] = opt_value
            cmake.definitions["CMAKE_BUILD_TYPE"] = self.options.cmake_build_type
        if self.settings.os == "Neutrino":
            if self.settings.os.distro == "DriveOS_Safety":
                cmake.definitions["SAFETY"] = "True"
            else:
                cmake.definitions["SAFETY"] = "False"
        cmake.definitions["VARIANT_JSON"] = r'{\\\"planning_driving_debug\\\": true, \\\"planning_L2_driving_debug\\\": false, \\\"prediction_driving_debug\\\": true, \\\"prediction_parking_debug\\\": true}'
        cmake.definitions["E2E_COMPILE_FLAG"] = "False"
        cmake.definitions["L2_COMPILE_FLAG"] = "False"
        cmake.definitions["prediction_parking_debug"] = "True"
        compile_modules = os.getenv('COMPILE_MODULES', 'ALL')
        if compile_modules == 'ALL':
            cmake.definitions["E2E_COMPILE_FLAG"] = "True"
            cmake.definitions["L2_COMPILE_FLAG"] = "True"
        elif compile_modules == 'E2E':
            cmake.definitions["E2E_COMPILE_FLAG"] = "True"
        elif compile_modules == 'L2':
            cmake.definitions["L2_COMPILE_FLAG"] = "True"
        cmake.configure(source_folder=f"{self.source_folder}")
        cpu_count = multiprocessing.cpu_count() - 1
        cmake.build(args=["-j{}".format(cpu_count)])
        cmake.install()

    def imports(self):
        if self.settings.os == "Neutrino":
            self.copy("*.so*", excludes=("librecompute_bytesoup_class_info.so"), dst="lib_w3/planning", src="lib")
        else:
            self.copy("*.so*", dst="lib_w3/planning", src="lib")
        print("copy files for asw pnp")
        self.copy("*.gie", dst="package/prediction/engines", root_package="hdlite_engines*")

    def package(self):
        pass


解释修改部分

  1. 更新 aos_runtimeruntime_utils 到兼容的版本:

    self.requires("aos_runtime/0.19.26+734dee48e2@aos/dev", override=True)
    self.requires("runtime_utils/0.7.26+734dee48e2@aos/dev", override=True)
    
    • aos_runtimeruntime_utils 更新到与 aos_logging/0.13.26+734dee48e2@aos/dev 兼容的版本。
  2. 覆盖 aos_logging 到指定版本:

    self.requires("aos_logging/0.13.26+734dee48e2@aos/dev", override=True)
    
    • 使用 override=True 参数,确保所有依赖项都使用同一版本的 aos_logging
  3. 注意其他依赖项的兼容性:

    • 如果其他依赖项也有类似的版本冲突,需要以相同的方式进行覆盖。
    • 请确保更新的版本在您的 Conan 远程仓库中可用。

后续步骤

  1. 保存修改后的 conanfile.py

  2. 在项目根目录运行 Conan 安装命令:

    conan install . --update
    
  3. 如果成功运行且没有错误,可以继续构建项目:

    cd build-planning-osd6-relwithdebinfo
    cmake ..
    make -j$(nproc)
    
  4. 如果仍然出现错误,请查看错误信息,检查是否有其他依赖项需要更新或覆盖。


附加建议

  • 验证依赖项版本的可用性:

    • 使用以下命令查看可用的包版本:

      conan search aos_logging* -r all
      conan search runtime_utils* -r all
      conan search aos_runtime* -r all
      
    • 确保指定的版本在您的 Conan 远程仓库中存在。

  • 检查依赖关系图:

    • 使用以下命令生成依赖关系图,以可视化方式查看依赖项:

      conan info . --graph=deps.html
      
    • 打开生成的 deps.html 文件,检查依赖项之间的关系和版本。

  • 与团队沟通:

    • 如果不确定更新到新版本是否安全,建议与项目的其他开发人员或维护人员沟通,确认版本更新的可行性。

总结

通过在 conanfile.py 中覆盖冲突的依赖项版本,并确保所有依赖项使用兼容的版本,可以解决包版本冲突的问题。请按照上述步骤修改您的 conanfile.py,并重新尝试构建项目。

如果在执行这些步骤后仍然遇到问题,请提供新的错误信息,我会继续协助您解决。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值