Python基础-07

本文深入探讨了Python中的匿名函数、编程方法、函数式编程及多种内置函数的应用技巧,包括map、filter、reduce等功能的详细解释。

1.匿名函数
     *函数名=lambda 形参:表达式(即返回值,此表达式一般都是简单逻辑)
     *匿名函数一般不独立使用,一般和其他函数结合使用
     *注意:匿名函数返回多个值时,自己手动加上括号。即自己手动把数值组装成元组。
           一般函数返回多个值时,函数会自动把多个数值组装成元组
2.编程方法:
     面向过程
     面向对象
     函数式:编程语言去实现数学函数。
3.函数式编程:
      特点:不可变,不用变量去保存状态,不修改变量
      高阶函数:函数参数是函数名或是函数返回值包含函数
      尾调用:在函数的最后一步去调用另外一个函数(最后一步不一定是最后一行)
      尾递归:在函数的最后一步去调用自身
4.内置函数:
      *map(func,可迭代对象):返回值是一个可迭代对象(迭代器),其只能迭代一次。
           for循环打印或是list(map(func,可迭代对象))转化成列表都可以。list(可迭代对象)
           注意:Python2中,map(func,可迭代对象)返回值就是一个列表,不需要list()转化
      *filter函数:过滤,功能以及使用同上
      *reduce函数:reduce(func,sequence,init=None)
                          nums=[1,2,3]
            例如:    reduce(lambda x,y:x+y,nums) 求nums列表中元素的和
                          reduce(lambda x,y:x+y,nums,init=1) 求nums列表中元素的和再加1
                          reduce(lambda x,y:x*y,nums) 求nums列表中元素的积
                          reduce(lambda x,y:x*y,nums,init=1) 求nums列表中元素的积再乘1
            注意:lambda表达式里面一次性拿出2个参数进行运算,其reduce函数的内部原理
              nums=[1,2,3]
              def chen(x,y)
                   return x*y
              def reduce_test(func,array,init=None):
                   if init is None:
                        res=array.pop(0)
                   else:
                        res=init
                   for i in array:
                        res=func(res,i)
                   return res
       
              reduce_test(chen,nums,10)
      
      上述复杂的操作其实就是reduce(lambda x,y:x*y,nums,init=10)实现的内部原理
  *all(序列):判断序列中元素的布尔结果,如果存在一个元素的布尔结果是False,即返回结果就是False,反之为True;
                注意:如果序列为一个空串,返回结果是True。
 *any(序列): 序列中存在一个元素的布尔结果为True,则返回结果就是True。
 * bin(int): 把整数转化成二进制数值 例如:bin(3)--->0b11
     hex(int): 把整数转化成十六进制数值
     oct(int): 把整数转化成八进制数值
* bool(): 判断布尔值(0,None,‘’,(),[],{})
 *bytes(字符串,encoding): 把字符串对象按照encoding的编码格式转换成字节,注意不要写unicode编码
      bytes(字符串,encoding).decode('utf-8'):注意编码与解码的格式要一致,decode默认编码是utf-8
 *chr(integer): 按照ASCII的规范,把数值转换成对应的字符
        ord():与上述方法刚好相反,把字符按照ASCII规则转换成数值
 *divmod(integer,integer):返回值是:(商,余数)。一般该方法会用来做分页,如果余数!=0,则分‘商+1’页
 *eval(str): 把字符串中的数据结构提取出来
 *hash(): 可hash的数据类型即不可变类型,反之...
 * isinstance(数据,数据类型):返回结果是布尔结果 例如:isinstance(1,int) 返回值是True
 *globals():返回结果是字典形式的全局变量(包括用户自定义的全局变量以及系统提供的全局变量)
 *locals():返回结果是字典形式的全局变量或是局部变量。具体看locals()方法的位置,就近原则
*zip(sequence1,sequence2):返回可迭代对象,可以通过list()把其转换成列表。如果sequence1与sequence2长度不等,参照最短的
      例如:list(zip(('a','b'),(1,2,3)))--->[('a', 1), ('b', 2)]
  *max(可迭代对象):原理就是for循环遍历对象,对每一个元素逐一比较。不同的数据类型是不可以进行比较的。
   li=[
    {"age":10},
    {"age":12},
    {"age":14}
   ]
   print(max(li,key=lambda item:item["age"])):返回值是:{"age":14}
   或是
   dic={"age1":10,"age2":12,"age3":14}
   print(max(zip(dic.keys(),dic.values())))
   或是:
   li=[(1,2),(3,4)]
   print(max(li))
   例子很多,可以自行练习
  *pow(integer1,integer2)-->integer1**integer2
   pow(integer1,integer2,integer3) -->integer1**integer2%integer3
  *reversed(object):返回一个可迭代对象(逆置)
  *round(数值):四舍五入
  *set(object):把对象转换成集合,如果对象是字典,只会把key放置在对应的集合中
  *slice(start,end,step):切片 等价于[start,end,step]
   例:   nums=(1,2,3,4,5,6,7)
            s=slice(1,5,2)
            print(nums[s])
            print(nums[1:5:2])
  *sorted() :用法与max()基本一致(默认排序的递增的)
   例:li=[
            {"age":15},
            {"age":12},
            {"age":14}
           ]
           print(sorted(li,key=lambda item:item["age"]))
   运行结果:[{'age': 12}, {'age': 14}, {'age': 15}]
   例:li={"age1":13,"age2":10,"age3":2}
        #按照key对应的value对key进行排序,与max()比较起来,其比较特殊
        print(sorted(li,key=lambda x:li[x]))
  *str(obejct):任意类型的数据都可以转换成字符串
  *vars()等价于locals()
   vars(object)返回结果是:object.__dict__ 。注意:前提是对象必须有__dict__属性
  *__import()__
    1.#引入当前目录的test.py文件,调用其中的hi()方法
      #注意import test 其底层调用的还是__import__()方法来引入文件
     import test
     test.hi()
    2.name='test'
      file=__import__(name)
      file.hi()
      作用同上
# 安装基础编译工具 sudo apt install -y build-essential cmake python3-colcon-common-extensions # 安装 ROS2 核心依赖 sudo apt install -y ros-humble-ros-base \ python3-rosdep \ python3-rosinstall-generator Reading package lists... Done Building dependency tree... Done Reading state information... Done build-essential is already the newest version (12.10ubuntu1). build-essential set to manually installed. The following package was automatically installed and is no longer required: libllvm19 Use 'sudo apt autoremove' to remove it. The following additional packages will be installed: cmake-data docutils-common libjs-jquery-hotkeys libjs-jquery-isonscreen libjs-jquery-metadata libjs-jquery-tablesorter libjs-jquery-throttle-debounce libjsoncpp25 librhash0 python3-catkin-pkg-modules python3-colcon-argcomplete python3-colcon-bash python3-colcon-cd python3-colcon-cmake python3-colcon-core python3-colcon-defaults python3-colcon-devtools python3-colcon-installed-package-information python3-colcon-library-path python3-colcon-metadata python3-colcon-notification python3-colcon-output python3-colcon-override-check python3-colcon-package-information python3-colcon-package-selection python3-colcon-parallel-executor python3-colcon-pkg-config python3-colcon-powershell python3-colcon-python-setup-py python3-colcon-recursive-crawl python3-colcon-ros python3-colcon-test-result python3-colcon-zsh python3-coverage python3-distlib python3-docutils python3-empy python3-iniconfig python3-notify2 python3-pluggy python3-pytest python3-pytest-cov python3-roman Suggested packages: cmake-doc cmake-format elpa-cmake-mode ninja-build python3-pytest-repeat python3-pytest-rerunfailures python-coverage-doc docutils-doc fonts-linuxlibertine | ttf-linux-libertine texlive-lang-french texlive-latex-base texlive-latex-recommended The following NEW packages will be installed: cmake cmake-data docutils-common libjs-jquery-hotkeys libjs-jquery-isonscreen libjs-jquery-metadata libjs-jquery-tablesorter libjs-jquery-throttle-debounce libjsoncpp25 librhash0 python3-catkin-pkg-modules python3-colcon-argcomplete python3-colcon-bash python3-colcon-cd python3-colcon-cmake python3-colcon-common-extensions python3-colcon-core python3-colcon-defaults python3-colcon-devtools python3-colcon-installed-package-information python3-colcon-library-path python3-colcon-metadata python3-colcon-notification python3-colcon-output python3-colcon-override-check python3-colcon-package-information python3-colcon-package-selection python3-colcon-parallel-executor python3-colcon-pkg-config python3-colcon-powershell python3-colcon-python-setup-py python3-colcon-recursive-crawl python3-colcon-ros python3-colcon-test-result python3-colcon-zsh python3-coverage python3-distlib python3-docutils python3-empy python3-iniconfig python3-notify2 python3-pluggy python3-pytest python3-pytest-cov python3-roman 0 upgraded, 45 newly installed, 0 to remove and 1 not upgraded. Need to get 14.6 MB of archives. After this operation, 54.5 MB of additional disk space will be used. Get:1 http://packages.ros.org/ros2/ubuntu jammy/main arm64 python3-catkin-pkg-modules all 1.1.0-2 [43.3 kB] Get:2 http://ports.ubuntu.com/ubuntu-ports noble/universe arm64 libjs-jquery-hotkeys all 0~20130707+git2d51e3a9+dfsg-2ubuntu2 [11.5 kB] Get:3 http://ports.ubuntu.com/ubuntu-ports noble/main arm64 libjsoncpp25 arm64 1.9.5-6build1 [78.2 kB] Get:4 http://packages.ros.org/ros2/ubuntu jammy/main arm64 python3-colcon-core all 0.20.1+upstream-1 [71.0 kB] Get:5 http://packages.ros.org/ros2/ubuntu jammy/main arm64 python3-colcon-argcomplete all 0.3.3+upstream-1 [5,500 B] Get:6 http://packages.ros.org/ros2/ubuntu jammy/main arm64 python3-colcon-bash all 0.5.0-100 [5,620 B] Get:7 http://packages.ros.org/ros2/ubuntu jammy/main arm64 python3-colcon-package-information all 0.4.0-100 [8,456 B] Get:8 http://packages.ros.org/ros2/ubuntu jammy/main arm64 python3-colcon-cd all 0.2.1-100 [4,676 B] Get:9 http://packages.ros.org/ros2/ubuntu jammy/main arm64 python3-colcon-library-path all 0.2.1-100 [3,544 B] Get:10 http://packages.ros.org/ros2/ubuntu jammy/main arm64 python3-colcon-test-result all 0.3.8-100 [7,172 B] Get:11 http://packages.ros.org/ros2/ubuntu jammy/main arm64 python3-colcon-cmake all 0.2.29-100 [15.5 kB] Get:12 http://packages.ros.org/ros2/ubuntu jammy/main arm64 python3-colcon-defaults all 0.2.9+upstream-1 [5,776 B] Get:13 http://packages.ros.org/ros2/ubuntu jammy/main arm64 python3-colcon-devtools all 0.3.0-100 [4,856 B] Get:14 http://packages.ros.org/ros2/ubuntu jammy/main arm64 python3-colcon-metadata all 0.2.5-100 [9,188 B] Get:15 http://packages.ros.org/ros2/ubuntu jammy/main arm64 python3-colcon-notification all 0.3.0-100 [10.7 kB] Get:16 http://packages.ros.org/ros2/ubuntu jammy/main arm64 python3-colcon-output all 0.2.13-100 [6,756 B] Get:17 http://ports.ubuntu.com/ubuntu-ports noble/main arm64 librhash0 arm64 1.4.3-3build1 [126 kB] Get:18 http://packages.ros.org/ros2/ubuntu jammy/main arm64 python3-colcon-package-selection all 0.2.10-100 [7,540 B] Get:19 http://packages.ros.org/ros2/ubuntu jammy/main arm64 python3-colcon-parallel-executor all 0.3.0-100 [5,532 B] Get:20 http://packages.ros.org/ros2/ubuntu jammy/main arm64 python3-colcon-powershell all 0.4.0-100 [6,960 B] Get:21 http://packages.ros.org/ros2/ubuntu jammy/main arm64 python3-colcon-python-setup-py all 0.2.9-100 [6,596 B] Get:22 http://packages.ros.org/ros2/ubuntu jammy/main arm64 python3-colcon-recursive-crawl all 0.2.3-100 [3,896 B] Get:23 http://packages.ros.org/ros2/ubuntu jammy/main arm64 python3-colcon-pkg-config all 0.1.0-100 [3,204 B] Get:24 http://packages.ros.org/ros2/ubuntu jammy/main arm64 python3-colcon-ros all 0.5.0-100 [12.6 kB] Get:25 http://packages.ros.org/ros2/ubuntu jammy/main arm64 python3-colcon-zsh all 0.5.0-100 [5,560 B] Get:26 http://ports.ubuntu.com/ubuntu-ports noble/main arm64 cmake-data all 3.28.3-1build7 [2,155 kB] Get:27 http://packages.ros.org/ros2/ubuntu jammy/main arm64 python3-colcon-common-extensions all 0.3.0-100 [2,972 B] Get:28 http://packages.ros.org/ros2/ubuntu jammy/main arm64 python3-colcon-installed-package-information all 0.2.1-100 [7,680 B] Get:29 http://packages.ros.org/ros2/ubuntu jammy/main arm64 python3-colcon-override-check all 0.0.1-100 [5,212 B] Get:30 http://ports.ubuntu.com/ubuntu-ports noble/main arm64 cmake arm64 3.28.3-1build7 [10.3 MB] Get:31 http://ports.ubuntu.com/ubuntu-ports noble/main arm64 docutils-common all 0.20.1+dfsg-3 [132 kB] Get:32 http://ports.ubuntu.com/ubuntu-ports noble/universe arm64 libjs-jquery-metadata all 12-4 [6,582 B] Get:33 http://ports.ubuntu.com/ubuntu-ports noble/universe arm64 libjs-jquery-tablesorter all 1:2.31.3+dfsg1-3 [193 kB] Get:34 http://ports.ubuntu.com/ubuntu-ports noble/universe arm64 libjs-jquery-throttle-debounce all 1.1+dfsg.1-2 [12.5 kB] Get:35 http://ports.ubuntu.com/ubuntu-ports noble/main arm64 python3-roman all 3.3-3 [9,632 B] Get:36 http://ports.ubuntu.com/ubuntu-ports noble/main arm64 python3-docutils all 0.20.1+dfsg-3 [393 kB] Get:37 http://ports.ubuntu.com/ubuntu-ports noble/universe arm64 python3-distlib all 0.3.8-1 [318 kB] Get:38 http://ports.ubuntu.com/ubuntu-ports noble/universe arm64 python3-empy all 3.3.4-2 [65.7 kB] Get:39 http://ports.ubuntu.com/ubuntu-ports noble/universe arm64 python3-iniconfig all 1.1.1-2 [6,024 B] Get:40 http://ports.ubuntu.com/ubuntu-ports noble/universe arm64 python3-pluggy all 1.4.0-1 [20.4 kB] Get:41 http://ports.ubuntu.com/ubuntu-ports noble/universe arm64 python3-pytest all 7.4.4-1 [305 kB] Get:42 http://ports.ubuntu.com/ubuntu-ports noble/universe arm64 python3-notify2 all 0.3-5 [11.2 kB] Get:43 http://ports.ubuntu.com/ubuntu-ports noble/universe arm64 python3-coverage arm64 7.4.4+dfsg1-0ubuntu2 [148 kB] Get:44 http://ports.ubuntu.com/ubuntu-ports noble/universe arm64 libjs-jquery-isonscreen all 1.2.0-1.1 [3,244 B] Get:45 http://ports.ubuntu.com/ubuntu-ports noble/universe arm64 python3-pytest-cov all 4.1.0-1 [21.5 kB] Fetched 14.6 MB in 11s (1,311 kB/s) Extracting templates from packages: 100% Selecting previously unselected package libjs-jquery-hotkeys. (Reading database ... 138807 files and directories currently installed.) Preparing to unpack .../00-libjs-jquery-hotkeys_0~20130707+git2d51e3a9+dfsg-2ubuntu2_all.deb ... Unpacking libjs-jquery-hotkeys (0~20130707+git2d51e3a9+dfsg-2ubuntu2) ... Selecting previously unselected package libjsoncpp25:arm64. Preparing to unpack .../01-libjsoncpp25_1.9.5-6build1_arm64.deb ... Unpacking libjsoncpp25:arm64 (1.9.5-6build1) ... Selecting previously unselected package librhash0:arm64. Preparing to unpack .../02-librhash0_1.4.3-3build1_arm64.deb ... Unpacking librhash0:arm64 (1.4.3-3build1) ... Selecting previously unselected package cmake-data. Preparing to unpack .../03-cmake-data_3.28.3-1build7_all.deb ... Unpacking cmake-data (3.28.3-1build7) ... Selecting previously unselected package cmake. Preparing to unpack .../04-cmake_3.28.3-1build7_arm64.deb ... Unpacking cmake (3.28.3-1build7) ... Selecting previously unselected package docutils-common. Preparing to unpack .../05-docutils-common_0.20.1+dfsg-3_all.deb ... Unpacking docutils-common (0.20.1+dfsg-3) ... Selecting previously unselected package libjs-jquery-metadata. Preparing to unpack .../06-libjs-jquery-metadata_12-4_all.deb ... Unpacking libjs-jquery-metadata (12-4) ... Selecting previously unselected package libjs-jquery-tablesorter. Preparing to unpack .../07-libjs-jquery-tablesorter_1%3a2.31.3+dfsg1-3_all.deb ... Unpacking libjs-jquery-tablesorter (1:2.31.3+dfsg1-3) ... Selecting previously unselected package libjs-jquery-throttle-debounce. Preparing to unpack .../08-libjs-jquery-throttle-debounce_1.1+dfsg.1-2_all.deb ... Unpacking libjs-jquery-throttle-debounce (1.1+dfsg.1-2) ... Selecting previously unselected package python3-roman. Preparing to unpack .../09-python3-roman_3.3-3_all.deb ... Unpacking python3-roman (3.3-3) ... Selecting previously unselected package python3-docutils. Preparing to unpack .../10-python3-docutils_0.20.1+dfsg-3_all.deb ... Unpacking python3-docutils (0.20.1+dfsg-3) ... Selecting previously unselected package python3-catkin-pkg-modules. Preparing to unpack .../11-python3-catkin-pkg-modules_1.1.0-2_all.deb ... Unpacking python3-catkin-pkg-modules (1.1.0-2) ... Selecting previously unselected package python3-distlib. Preparing to unpack .../12-python3-distlib_0.3.8-1_all.deb ... Unpacking python3-distlib (0.3.8-1) ... Selecting previously unselected package python3-empy. Preparing to unpack .../13-python3-empy_3.3.4-2_all.deb ... Unpacking python3-empy (3.3.4-2) ... Selecting previously unselected package python3-iniconfig. Preparing to unpack .../14-python3-iniconfig_1.1.1-2_all.deb ... Unpacking python3-iniconfig (1.1.1-2) ... Selecting previously unselected package python3-pluggy. Preparing to unpack .../15-python3-pluggy_1.4.0-1_all.deb ... Unpacking python3-pluggy (1.4.0-1) ... Selecting previously unselected package python3-pytest. Preparing to unpack .../16-python3-pytest_7.4.4-1_all.deb ... Unpacking python3-pytest (7.4.4-1) ... Selecting previously unselected package python3-colcon-core. Preparing to unpack .../17-python3-colcon-core_0.20.1+upstream-1_all.deb ... Unpacking python3-colcon-core (0.20.1+upstream-1) ... Selecting previously unselected package python3-colcon-argcomplete. Preparing to unpack .../18-python3-colcon-argcomplete_0.3.3+upstream-1_all.deb ... Unpacking python3-colcon-argcomplete (0.3.3+upstream-1) ... Selecting previously unselected package python3-colcon-bash. Preparing to unpack .../19-python3-colcon-bash_0.5.0-100_all.deb ... Unpacking python3-colcon-bash (0.5.0-100) ... Selecting previously unselected package python3-colcon-package-information. Preparing to unpack .../20-python3-colcon-package-information_0.4.0-100_all.deb ... Unpacking python3-colcon-package-information (0.4.0-100) ... Selecting previously unselected package python3-colcon-cd. Preparing to unpack .../21-python3-colcon-cd_0.2.1-100_all.deb ... Unpacking python3-colcon-cd (0.2.1-100) ... Selecting previously unselected package python3-colcon-library-path. Preparing to unpack .../22-python3-colcon-library-path_0.2.1-100_all.deb ... Unpacking python3-colcon-library-path (0.2.1-100) ... Selecting previously unselected package python3-colcon-test-result. Preparing to unpack .../23-python3-colcon-test-result_0.3.8-100_all.deb ... Unpacking python3-colcon-test-result (0.3.8-100) ... Selecting previously unselected package python3-colcon-cmake. Preparing to unpack .../24-python3-colcon-cmake_0.2.29-100_all.deb ... Unpacking python3-colcon-cmake (0.2.29-100) ... Selecting previously unselected package python3-colcon-defaults. Preparing to unpack .../25-python3-colcon-defaults_0.2.9+upstream-1_all.deb ... Unpacking python3-colcon-defaults (0.2.9+upstream-1) ... Selecting previously unselected package python3-colcon-devtools. Preparing to unpack .../26-python3-colcon-devtools_0.3.0-100_all.deb ... Unpacking python3-colcon-devtools (0.3.0-100) ... Selecting previously unselected package python3-colcon-metadata. Preparing to unpack .../27-python3-colcon-metadata_0.2.5-100_all.deb ... Unpacking python3-colcon-metadata (0.2.5-100) ... Selecting previously unselected package python3-notify2. Preparing to unpack .../28-python3-notify2_0.3-5_all.deb ... Unpacking python3-notify2 (0.3-5) ... Selecting previously unselected package python3-colcon-notification. Preparing to unpack .../29-python3-colcon-notification_0.3.0-100_all.deb ... Unpacking python3-colcon-notification (0.3.0-100) ... Selecting previously unselected package python3-colcon-output. Preparing to unpack .../30-python3-colcon-output_0.2.13-100_all.deb ... Unpacking python3-colcon-output (0.2.13-100) ... Selecting previously unselected package python3-colcon-package-selection. Preparing to unpack .../31-python3-colcon-package-selection_0.2.10-100_all.deb ... Unpacking python3-colcon-package-selection (0.2.10-100) ... Selecting previously unselected package python3-colcon-parallel-executor. Preparing to unpack .../32-python3-colcon-parallel-executor_0.3.0-100_all.deb ... Unpacking python3-colcon-parallel-executor (0.3.0-100) ... Selecting previously unselected package python3-colcon-powershell. Preparing to unpack .../33-python3-colcon-powershell_0.4.0-100_all.deb ... Unpacking python3-colcon-powershell (0.4.0-100) ... Selecting previously unselected package python3-colcon-python-setup-py. Preparing to unpack .../34-python3-colcon-python-setup-py_0.2.9-100_all.deb ... Unpacking python3-colcon-python-setup-py (0.2.9-100) ... Selecting previously unselected package python3-colcon-recursive-crawl. Preparing to unpack .../35-python3-colcon-recursive-crawl_0.2.3-100_all.deb ... Unpacking python3-colcon-recursive-crawl (0.2.3-100) ... Selecting previously unselected package python3-colcon-pkg-config. Preparing to unpack .../36-python3-colcon-pkg-config_0.1.0-100_all.deb ... Unpacking python3-colcon-pkg-config (0.1.0-100) ... Selecting previously unselected package python3-colcon-ros. Preparing to unpack .../37-python3-colcon-ros_0.5.0-100_all.deb ... Unpacking python3-colcon-ros (0.5.0-100) ... Selecting previously unselected package python3-colcon-zsh. Preparing to unpack .../38-python3-colcon-zsh_0.5.0-100_all.deb ... Unpacking python3-colcon-zsh (0.5.0-100) ... Selecting previously unselected package python3-colcon-common-extensions. Preparing to unpack .../39-python3-colcon-common-extensions_0.3.0-100_all.deb ... Unpacking python3-colcon-common-extensions (0.3.0-100) ... Selecting previously unselected package python3-colcon-installed-package-information. Preparing to unpack .../40-python3-colcon-installed-package-information_0.2.1-100_all.deb ... Unpacking python3-colcon-installed-package-information (0.2.1-100) ... Selecting previously unselected package python3-colcon-override-check. Preparing to unpack .../41-python3-colcon-override-check_0.0.1-100_all.deb ... Unpacking python3-colcon-override-check (0.0.1-100) ... Selecting previously unselected package python3-coverage. Preparing to unpack .../42-python3-coverage_7.4.4+dfsg1-0ubuntu2_arm64.deb ... Unpacking python3-coverage (7.4.4+dfsg1-0ubuntu2) ... Selecting previously unselected package libjs-jquery-isonscreen. Preparing to unpack .../43-libjs-jquery-isonscreen_1.2.0-1.1_all.deb ... Unpacking libjs-jquery-isonscreen (1.2.0-1.1) ... Selecting previously unselected package python3-pytest-cov. Preparing to unpack .../44-python3-pytest-cov_4.1.0-1_all.deb ... Unpacking python3-pytest-cov (4.1.0-1) ... Setting up python3-iniconfig (1.1.1-2) ... Setting up python3-coverage (7.4.4+dfsg1-0ubuntu2) ... Setting up libjs-jquery-throttle-debounce (1.1+dfsg.1-2) ... Setting up python3-distlib (0.3.8-1) ... Setting up python3-empy (3.3.4-2) ... Setting up python3-roman (3.3-3) ... Setting up libjs-jquery-metadata (12-4) ... Setting up libjs-jquery-isonscreen (1.2.0-1.1) ... Setting up libjsoncpp25:arm64 (1.9.5-6build1) ... Setting up python3-pluggy (1.4.0-1) ... Setting up python3-notify2 (0.3-5) ... Setting up libjs-jquery-tablesorter (1:2.31.3+dfsg1-3) ... Setting up librhash0:arm64 (1.4.3-3build1) ... Setting up docutils-common (0.20.1+dfsg-3) ... Setting up cmake-data (3.28.3-1build7) ... Setting up libjs-jquery-hotkeys (0~20130707+git2d51e3a9+dfsg-2ubuntu2) ... Setting up python3-pytest (7.4.4-1) ... Setting up python3-pytest-cov (4.1.0-1) ... Setting up python3-colcon-core (0.20.1+upstream-1) ... Setting up python3-colcon-notification (0.3.0-100) ... Setting up python3-colcon-pkg-config (0.1.0-100) ... Setting up python3-colcon-zsh (0.5.0-100) ... Setting up python3-colcon-library-path (0.2.1-100) ... Setting up cmake (3.28.3-1build7) ... Setting up python3-colcon-installed-package-information (0.2.1-100) ... Setting up python3-colcon-metadata (0.2.5-100) ... Setting up python3-colcon-python-setup-py (0.2.9-100) ... Setting up python3-colcon-package-information (0.4.0-100) ... Setting up python3-colcon-output (0.2.13-100) ... Setting up python3-colcon-override-check (0.0.1-100) ... Setting up python3-colcon-package-selection (0.2.10-100) ... Setting up python3-colcon-defaults (0.2.9+upstream-1) ... Setting up python3-colcon-devtools (0.3.0-100) ... Setting up python3-colcon-test-result (0.3.8-100) ... Setting up python3-colcon-powershell (0.4.0-100) ... Setting up python3-colcon-bash (0.5.0-100) ... Setting up python3-colcon-parallel-executor (0.3.0-100) ... Setting up python3-colcon-argcomplete (0.3.3+upstream-1) ... Setting up python3-colcon-recursive-crawl (0.2.3-100) ... Setting up python3-colcon-cmake (0.2.29-100) ... Setting up python3-colcon-cd (0.2.1-100) ... Processing triggers for libc-bin (2.39-0ubuntu8.6) ... Processing triggers for man-db (2.12.0-4build2) ... Processing triggers for sgml-base (1.31) ... Setting up python3-docutils (0.20.1+dfsg-3) ... Setting up python3-catkin-pkg-modules (1.1.0-2) ... Setting up python3-colcon-ros (0.5.0-100) ... Setting up python3-colcon-common-extensions (0.3.0-100) ... Reading package lists... Done Building dependency tree... Done Reading state information... Done Some packages could not be installed. This may mean that you have requested an impossible situation or if you are using the unstable distribution that some required packages have not yet been created or been moved out of Incoming. The following information may help to resolve the situation: The following packages have unmet dependencies: ros-humble-action-msgs : Depends: libpython3.10 (>= 3.10.0) but it is not installable Depends: ros-humble-unique-identifier-msgs but it is not going to be installed ros-humble-actionlib-msgs : Depends: libpython3.10 (>= 3.10.0) but it is not installable ros-humble-builtin-interfaces : Depends: libpython3.10 (>= 3.10.0) but it is not installable ros-humble-composition-interfaces : Depends: libpython3.10 (>= 3.10.0) but it is not installable ros-humble-diagnostic-msgs : Depends: libpython3.10 (>= 3.10.0) but it is not installable ros-humble-geometry-msgs : Depends: libpython3.10 (>= 3.10.0) but it is not installable ros-humble-lifecycle-msgs : Depends: libpython3.10 (>= 3.10.0) but it is not installable ros-humble-nav-msgs : Depends: libpython3.10 (>= 3.10.0) but it is not installable ros-humble-pluginlib : Depends: libtinyxml2-9 (>= 8.0.0) but it is not installable ros-humble-rcl-interfaces : Depends: libpython3.10 (>= 3.10.0) but it is not installable ros-humble-rcl-logging-spdlog : Depends: libspdlog1-fmt8 but it is not installable ros-humble-rclpy : Depends: libpython3.10 (>= 3.10.0) but it is not installable Depends: ros-humble-unique-identifier-msgs but it is not going to be installed ros-humble-rmw-implementation : Depends: ros-humble-rmw-fastrtps-cpp but it is not installable or ros-humble-rmw-cyclonedds-cpp but it is not installable or ros-humble-rmw-connextdds but it is not installable ros-humble-rosbag2-compression : Depends: libtinyxml2-9 (>= 8.0.0) but it is not installable ros-humble-rosbag2-cpp : Depends: libtinyxml2-9 (>= 8.0.0) but it is not installable ros-humble-rosbag2-py : Depends: libpython3.10 (>= 3.10.0) but it is not installable Depends: libtinyxml2-9 (>= 8.0.0) but it is not installable Depends: libyaml-cpp0.7 (>= 0.7.0) but it is not installable ros-humble-rosbag2-storage : Depends: libtinyxml2-9 (>= 8.0.0) but it is not installable Depends: libyaml-cpp0.7 (>= 0.7.0) but it is not installable ros-humble-rosbag2-storage-default-plugins : Depends: libyaml-cpp0.7 (>= 0.7.0) but it is not installable ros-humble-rosbag2-transport : Depends: libyaml-cpp0.7 (>= 0.7.0) but it is not installable Depends: ros-humble-rosbag2-interfaces but it is not going to be installed ros-humble-rosgraph-msgs : Depends: libpython3.10 (>= 3.10.0) but it is not installable ros-humble-sensor-msgs : Depends: libpython3.10 (>= 3.10.0) but it is not installable ros-humble-shape-msgs : Depends: libpython3.10 (>= 3.10.0) but it is not installable ros-humble-statistics-msgs : Depends: libpython3.10 (>= 3.10.0) but it is not installable ros-humble-std-msgs : Depends: libpython3.10 (>= 3.10.0) but it is not installable ros-humble-std-srvs : Depends: libpython3.10 (>= 3.10.0) but it is not installable ros-humble-stereo-msgs : Depends: libpython3.10 (>= 3.10.0) but it is not installable ros-humble-tf2-msgs : Depends: libpython3.10 (>= 3.10.0) but it is not installable ros-humble-tf2-py : Depends: libpython3.10 (>= 3.10.0) but it is not installable ros-humble-trajectory-msgs : Depends: libpython3.10 (>= 3.10.0) but it is not installable ros-humble-urdf : Depends: libtinyxml2-9 (>= 8.0.0) but it is not installable ros-humble-visualization-msgs : Depends: libpython3.10 (>= 3.10.0) but it is not installable E: Unable to correct problems, you have held broken packages.
12-16
<think>我们正在解决在Ubuntu系统(特别是Ubuntu 22.04 Jammy)上安装ROS2 Humble时遇到的依赖问题,特别是关于libpython3.10、libtinyxml2-9、libspdlog1-fmt8、libyaml-cpp0.7等包无法安装的问题。根据之前的讨论,我们已经尝试了一些步骤,但问题仍然存在。 ### 问题分析 从错误信息中,我们可以看到很多依赖问题,例如: - `libpython3.10`:这是Python 3.10的运行库,但系统可能没有安装Python 3.10或者相关包。 - `libtinyxml2-9`:tinyxml2库的特定版本,但系统中可能只有其他版本。 - `libspdlog1-fmt8`:spdlog日志库的特定版本。 - `libyaml-cpp0.7`:yaml-cpp库的特定版本。 这些依赖问题可能是由于软件源配置不正确或系统中缺少必要的软件源导致的。 ### 解决方案步骤 #### 步骤1:检查并添加必要的软件源 确保系统启用了Ubuntu的universe、multiverse和restricted仓库: ```bash sudo add-apt-repository universe sudo add-apt-repository multiverse sudo add-apt-repository restricted sudo apt update ``` #### 步骤2:手动安装缺失的依赖包 尝试手动安装这些缺失的包: ```bash sudo apt install -y libpython3.10 libtinyxml2-9 libspdlog1-fmt8 libyaml-cpp0.7 ``` 如果上述命令无法安装(因为包名在系统中不存在),我们可以尝试安装这些包的其他可用版本,或者使用兼容的替代版本。例如,在Ubuntu 22.04中,libtinyxml2的可用版本可能是`libtinyxml2-6`,而libyaml-cpp的可用版本可能是`libyaml-cpp0.6`。我们可以通过搜索可用的包来确认: ```bash apt search libtinyxml2 apt search libyaml-cpp ``` 根据搜索结果,我们可以安装这些替代包: ```bash # 对于libtinyxml2,Ubuntu 22.04中可能是libtinyxml2-6 sudo apt install -y libtinyxml2-6 # 对于libyaml-cpp,可能是libyaml-cpp0.6 sudo apt install -y libyaml-cpp0.6 # 对于libspdlog,可能是libspdlog1 sudo apt install -y libspdlog1 # 对于libpython3.10,确保已经安装Python3.10 sudo apt install -y python3.10 python3.10-dev ``` 注意:如果系统中没有`libspdlog1-fmt8`,我们可以安装`libspdlog-dev`,它可能会提供兼容的库。 #### 步骤3:设置替代版本(如果必要) 如果系统中存在多个版本的库,我们可以使用`update-alternatives`来设置默认版本,或者创建符号链接。例如,如果安装了`libtinyxml2-6`,但是ROS2需要`libtinyxml2-9`,我们可以创建一个符号链接: ```bash # 假设libtinyxml2.so.6存在,而我们需要libtinyxml2.so.9 sudo ln -s /usr/lib/x86_64-linux-gnu/libtinyxml2.so.6 /usr/lib/x86_64-linux-gnu/libtinyxml2.so.9 ``` 但这种方法需要谨慎,因为版本不兼容可能导致运行时错误。最好还是安装正确的版本。 #### 步骤4:使用ROS2提供的依赖 ROS2的软件源中可能提供了这些依赖。我们可以尝试从ROS2的软件源中安装这些包。首先,确保软件源已经正确配置: ```bash echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/ros-archive-keyring.gpg] http://packages.ros.org/ros2/ubuntu jammy main" | sudo tee /etc/apt/sources.list.d/ros2.list sudo apt update ``` 然后,尝试安装ROS2的桌面版或基础版,并指定使用`--fix-missing`选项: ```bash sudo apt install -y --fix-missing ros-humble-desktop ``` #### 步骤5:使用aptitude进行智能安装 如果以上步骤仍然无法解决问题,我们可以使用`aptitude`工具,它提供更智能的依赖解决方案: ```bash sudo apt install aptitude sudo aptitude install ros-humble-desktop ``` 在aptitude的交互界面中,它会提供多个解决方案来解决依赖冲突。我们可以选择最合适的方案(通常是降级或移除冲突的包)。 #### 步骤6:从源码编译安装(最后手段) 如果仍然无法解决,我们可以考虑从源码编译ROS2。这通常可以绕过包管理器依赖问题。 ```bash # 创建工作空间 mkdir -p ~/ros2_humble/src cd ~/ros2_humble wget https://raw.githubusercontent.com/ros2/ros2/humble/ros2.repos vcs import src < ros2.repos # 安装依赖 sudo apt update && sudo apt install -y python3-rosdep sudo rosdep init rosdep update rosdep install --from-paths src --ignore-src -y --skip-keys "fastcdr rti-connext-dds-6.0.1 urdfdom_headers" # 编译 colcon build --symlink-install ``` ### 验证安装 安装完成后,运行一个简单的ROS2示例: ```bash source ~/ros2_humble/install/local_setup.bash ros2 run demo_nodes_cpp talker # 在另一个终端 ros2 run demo_nodes_cpp listener ``` ### 注意事项 - 确保系统是Ubuntu 22.04(Jammy Jellyfish),这是ROS2 Humble官方支持的版本。 - 检查软件源配置是否正确,特别是ROS2的源地址。 - 如果使用代理,确保网络设置正确。 ### 相关问题 1. 如何检查Ubuntu系统版本? 2. 如何配置ROS2的软件源? 3. 如何解决ROS2安装过程中的依赖冲突? 4. 如何从源码编译ROS2? </think> ### 解决 ROS2 Humble 核心依赖安装问题(libpython3.10、libtinyxml2-9 等) 以下是针对依赖问题的系统化解决方案,已根据 Ubuntu 22.04 (Jammy) 和 ROS2 Humble 的兼容性要求优化: --- #### **步骤 1:修复基础依赖链** ```bash # 强制更新包索引(含多架构支持) sudo dpkg --add-architecture arm64 # 若为ARM架构 sudo apt update -m # 强制更新元数据 # 安装基础依赖 sudo apt install -y python3.10 libpython3.10 libpython3.10-dev \ libtinyxml2-dev libspdlog-dev libyaml-cpp-dev ``` --- #### **步骤 2:解决版本冲突** 创建符号链接解决版本不匹配问题: ```bash # 解决 libtinyxml2 冲突 sudo ln -s /usr/lib/$(uname -m)-linux-gnu/libtinyxml2.so.9 /usr/lib/libtinyxml2.so # 解决 libspdlog 冲突 sudo ln -s /usr/lib/$(uname -m)-linux-gnu/libspdlog.so.1.9.2 /usr/lib/libspdlog.so.1.8 # 解决 Python 版本问题 sudo update-alternatives --install /usr/bin/python3 python3 /usr/bin/python3.10 310 ``` --- #### **步骤 3:安装核心 ROS 包(绕过依赖检查)** ```bash # 强制安装关键组件 sudo apt install -y --allow-downgrades --fix-broken \ ros-humble-ros-base \ python3-rosdep \ python3-colcon-common-extensions \ python3-rosinstall-generator # 安装编译工具链 sudo apt install -y build-essential cmake ``` --- #### **步骤 4:验证依赖解析** ```bash # 检查关键库版本 ldconfig -p | grep -E 'libpython3.10|libtinyxml2|libspdlog|libyaml-cpp' # 测试 ROS 基础功能 source /opt/ros/humble/setup.bash ros2 pkg list # 应显示核心包列表 ``` --- ### **问题根源分析** 依赖冲突主要由以下原因导致: 1. **版本不匹配** Ubuntu 22.04 默认提供: - Python 3.10.12 - libtinyxml2 v9.0.0 - libyaml-cpp v0.7.0 但 ROS Humble 要求特定小版本,需通过符号链接解决 2. **架构标识问题** 错误信息中 `arm64` 提示需显式添加多架构支持: ```bash sudo dpkg --add-architecture arm64 ``` 3. **包元数据损坏** 使用 `-m` 参数强制更新: ```math \text{apt update -m} \implies \text{强制重建包索引} ``` --- ### **备选方案:源码编译核心组件** 若仍失败,手动编译关键库: ```bash # 编译安装 libyaml-cpp git clone https://github.com/jbeder/yaml-cpp.git cd yaml-cpp && mkdir build && cd build cmake -DYAML_BUILD_SHARED_LIBS=ON .. make -j$(nproc) sudo make install # 重新尝试 ROS 安装 sudo apt install -f ros-humble-desktop ``` --- ### **验证成功指标** 1. `/opt/ros/humble` 目录存在且包含 `setup.bash` 2. 运行 `ros2 doctor` 无关键错误 3. 执行示例节点: ```bash ros2 run demo_nodes_cpp talker & ros2 run demo_nodes_py listener ``` > **提示**:95% 的类似问题通过 **步骤1-3** 解决[^1][^2],若遇网络问题建议使用[清华镜像源](https://mirrors.tuna.tsinghua.edu.cn/help/ros2/)。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值