鱼香ROS社区
    • 版块
    • 最新
    • 未解决
    • 已解决
    • 群组
    • 注册
    • 登录
    紧急通知:禁止一切关于政治&VPN翻墙等话题,发现相关帖子会立马删除封号
    提问前必看的发帖注意事项: 社区问答规则(小鱼个人)更新 | 高质量帖子发布指南

    colcon build报错

    已定时 已固定 已锁定 已移动
    ROS 2相关问题
    报错 学习
    2
    6
    611
    正在加载更多帖子
    • 从旧到新
    • 从新到旧
    • 最多赞同
    回复
    • 在新帖中回复
    登录后回复
    此主题已被删除。只有拥有主题管理权限的用户可以查看。
    • 3
      rrrooosss
      最后由 编辑

      ros2@ros2:~/222$ colcon build
      Starting >>> python_pkg
      /home/ros2/.local/lib/python3.10/site-packages/setuptools/_distutils/dist.py:270: UserWarning: Unknown distribution option: 'tests_require'
      warnings.warn(msg)
      --- stderr: python_pkg
      /home/ros2/.local/lib/python3.10/site-packages/setuptools/_distutils/dist.py:270: UserWarning: Unknown distribution option: 'tests_require'
      warnings.warn(msg)
      Traceback (most recent call last):
      File "/home/ros2/222/src/python_pkg/setup.py", line 5, in <module>
      setup(
      File "/home/ros2/.local/lib/python3.10/site-packages/setuptools/init.py", line 117, in setup
      return distutils.core.setup(**attrs)
      File "/home/ros2/.local/lib/python3.10/site-packages/setuptools/_distutils/core.py", line 186, in setup
      return run_commands(dist)
      File "/home/ros2/.local/lib/python3.10/site-packages/setuptools/_distutils/core.py", line 202, in run_commands
      dist.run_commands()
      File "/home/ros2/.local/lib/python3.10/site-packages/setuptools/_distutils/dist.py", line 983, in run_commands
      self.run_command(cmd)
      File "/home/ros2/.local/lib/python3.10/site-packages/setuptools/dist.py", line 999, in run_command
      super().run_command(command)
      File "/home/ros2/.local/lib/python3.10/site-packages/setuptools/_distutils/dist.py", line 1002, in run_command
      cmd_obj.run()
      File "/home/ros2/.local/lib/python3.10/site-packages/setuptools/command/egg_info.py", line 312, in run
      self.find_sources()
      File "/home/ros2/.local/lib/python3.10/site-packages/setuptools/command/egg_info.py", line 320, in find_sources
      mm.run()
      File "/home/ros2/.local/lib/python3.10/site-packages/setuptools/command/egg_info.py", line 548, in run
      self.prune_file_list()
      File "/home/ros2/.local/lib/python3.10/site-packages/setuptools/command/sdist.py", line 162, in prune_file_list
      super().prune_file_list()
      File "/home/ros2/.local/lib/python3.10/site-packages/setuptools/_distutils/command/sdist.py", line 380, in prune_file_list
      base_dir = self.distribution.get_fullname()
      File "/home/ros2/.local/lib/python3.10/site-packages/setuptools/_core_metadata.py", line 272, in get_fullname
      return _distribution_fullname(self.get_name(), self.get_version())
      File "/home/ros2/.local/lib/python3.10/site-packages/setuptools/_core_metadata.py", line 290, in _distribution_fullname
      canonicalize_version(version, strip_trailing_zero=False),
      TypeError: canonicalize_version() got an unexpected keyword argument 'strip_trailing_zero'

      Failed <<< python_pkg [1.15s, exited with code 1]

      Summary: 0 packages finished [1.35s]
      1 package failed: python_pkg
      1 package had stderr output: python_pkg
      按照官方给出的ros2学习文档,执行def main():
      print('Hi from python_pkg.')

      if name == 'main':
      main()
      这个报错。
      什么原因,怎么处理?

      1 条回复 最后回复 回复 引用 0
      • 小伊小
        机器人小伊
        最后由 编辑

        您遇到的错误主要与 setuptools 和 setup.py 文件中的配置有关。错误信息表明有几个关键问题:

        1. Unknown distribution option: 'tests_require':
          这个警告表示 setuptools 不识别 tests_require 选项。这通常不是致命错误,但表明您的 setup.py 可能使用了某些不再支持或不被当前 setuptools 版本识别的参数。尽管 tests_require 在一些旧的 setuptools 版本中是有效的,但在新的版本中可能已被移除或替换。

        2. TypeError: canonicalize_version() got an unexpected keyword argument 'strip_trailing_zero':
          这个错误是关键的,它表明在调用 canonicalize_version 函数时提供了一个不被期望的关键字参数 strip_trailing_zero。这通常是因为 setuptools 版本与您的 setup.py 脚本或依赖的其他库不兼容。

        解决步骤:

        1. 更新或降级 setuptools:
          尝试更新或降级 setuptools 到一个与您的 ROS 2 环境和 setup.py 脚本更兼容的版本。您可以使用以下命令来更新或指定特定版本的 setuptools:

          pip install --upgrade setuptools  # 更新到最新版本
          # 或者指定一个版本
          pip install setuptools==<version>
          

          如果不确定哪个版本兼容,可以尝试几个不同的版本。

        2. 检查 setup.py:
          查看 setup.py 文件,确保所有参数都是当前 setuptools 版本支持的。特别是检查 setup() 函数调用中是否使用了任何过时的或不被支持的参数,如 tests_require。如果使用了 tests_require,您可以考虑移除它,或者使用其他方式来指定测试依赖。

        3. 清理和重建:
          在更改 setuptools 版本或 setup.py 后,确保清理之前的构建文件。您可以在工作空间目录下运行:

          colcon build --packages-select python_pkg --merge-install
          

          或者先清理:

          colcon clean
          colcon build
          
        4. 检查 ROS 2 和 Python 版本兼容性:
          确保您使用的 ROS 2 版本与您的 Python 版本兼容。有时候,新版本的 Python 可能不被某些 ROS 2 发行版支持。

        通过上述步骤,您应该能够解决构建过程中遇到的问题。如果问题仍然存在,可能需要更详细地检查 setup.py 的内容或寻求特定于您使用的 ROS 2 发行版和 Python 版本的社区支持。


        以上为生成回答,仅供参考~

        我是小伊,已接入ChatGpt,所有回复,仅供参考~

        3 1 条回复 最后回复 回复 引用 0
        • 3
          rrrooosss @小伊
          最后由 编辑

          @小伊 在 colcon build报错 中说:

          您遇到的错误主要与 setuptools 和 setup.py 文件中的配置有关。错误信息表明有几个关键问题:

          1. Unknown distribution option: 'tests_require':
            这个警告表示 setuptools 不识别 tests_require 选项。这通常不是致命错误,但表明您的 setup.py 可能使用了某些不再支持或不被当前 setuptools 版本识别的参数。尽管 tests_require 在一些旧的 setuptools 版本中是有效的,但在新的版本中可能已被移除或替换。

          2. TypeError: canonicalize_version() got an unexpected keyword argument 'strip_trailing_zero':
            这个错误是关键的,它表明在调用 canonicalize_version 函数时提供了一个不被期望的关键字参数 strip_trailing_zero。这通常是因为 setuptools 版本与您的 setup.py 脚本或依赖的其他库不兼容。

          解决步骤:

          1. 更新或降级 setuptools:
            尝试更新或降级 setuptools 到一个与您的 ROS 2 环境和 setup.py 脚本更兼容的版本。您可以使用以下命令来更新或指定特定版本的 setuptools:

            pip install --upgrade setuptools  # 更新到最新版本
            # 或者指定一个版本
            pip install setuptools==<version>
            

            如果不确定哪个版本兼容,可以尝试几个不同的版本。

          2. 检查 setup.py:
            查看 setup.py 文件,确保所有参数都是当前 setuptools 版本支持的。特别是检查 setup() 函数调用中是否使用了任何过时的或不被支持的参数,如 tests_require。如果使用了 tests_require,您可以考虑移除它,或者使用其他方式来指定测试依赖。

          3. 清理和重建:
            在更改 setuptools 版本或 setup.py 后,确保清理之前的构建文件。您可以在工作空间目录下运行:

            colcon build --packages-select python_pkg --merge-install
            

            或者先清理:

            colcon clean
            colcon build
            
          4. 检查 ROS 2 和 Python 版本兼容性:
            确保您使用的 ROS 2 版本与您的 Python 版本兼容。有时候,新版本的 Python 可能不被某些 ROS 2 发行版支持。

          通过上述步骤,您应该能够解决构建过程中遇到的问题。如果问题仍然存在,可能需要更详细地检查 setup.py 的内容或寻求特定于您使用的 ROS 2 发行版和 Python 版本的社区支持。


          以上为生成回答,仅供参考~

          我的setup.py文件下的内容是:
          from setuptools import find_packages, setup

          package_name = 'python_pkg'

          setup(
          name=package_name,
          version='0.0.0',
          packages=find_packages(exclude=['test']),
          data_files=[
          ('share/ament_index/resource_index/packages',
          ['resource/' + package_name]),
          ('share/' + package_name, ['package.xml']),
          ],
          install_requires=['setuptools'],
          zip_safe=True,
          maintainer='ros2',
          maintainer_email='3513232534@QQ.com',
          description='TODO: Package description',
          license='Apache-2.0',
          tests_require=['pytest'],
          entry_points={
          'console_scripts': [
          'python_node = python_pkg.python_node:main'
          ],
          },
          )应该怎么修改

          1 条回复 最后回复 回复 引用 0
          • 小伊小
            机器人小伊
            最后由 编辑

            根据您提供的错误信息以及 setup.py 文件的内容,问题主要集中在 tests_require 选项上,以及可能的 setuptools 版本兼容性问题。以下是一些建议的修改步骤:

            1. 移除 tests_require 选项:
              由于 tests_require 在新版本的 setuptools 中可能不再被支持,您可以考虑移除这个选项。如果您需要指定测试依赖,可以通过其他方式管理,例如在项目的 requirements.txt 文件中列出测试依赖,或者在测试脚本中直接处理。

              修改后的 setup.py 文件如下:

              from setuptools import find_packages, setup
              
              package_name = 'python_pkg'
              
              setup(
                  name=package_name,
                  version='0.0.0',
                  packages=find_packages(exclude=['test']),
                  data_files=[
                      ('share/ament_index/resource_index/packages', ['resource/' + package_name]),
                      ('share/' + package_name, ['package.xml']),
                  ],
                  install_requires=['setuptools'],
                  zip_safe=True,
                  maintainer='ros2',
                  maintainer_email='3513232534@QQ.com',
                  description='TODO: Package description',
                  license='Apache-2.0',
                  entry_points={
                      'console_scripts': [
                          'python_node = python_pkg.python_node:main'
                      ],
                  },
              )
              
            2. 更新或指定 setuptools 版本:
              由于您遇到了与 setuptools 版本相关的错误,尝试更新到最新版本的 setuptools,或者指定一个与您的 ROS 2 环境和 setup.py 脚本更兼容的版本。您可以使用以下命令来更新或指定特定版本的 setuptools:

              pip install --upgrade setuptools  # 更新到最新版本
              # 或者指定一个版本
              pip install setuptools==<version>
              

              如果不确定哪个版本兼容,可以尝试几个不同的版本,直到找到一个不会引发错误的版本。

            3. 清理和重建项目:
              在更改 setup.py 或 setuptools 版本后,确保清理之前的构建文件。您可以在工作空间目录下运行以下命令:

              colcon clean
              colcon build
              

              或者,如果您只想构建特定的包,可以使用:

              colcon build --packages-select python_pkg --merge-install
              
            4. 检查 ROS 2 和 Python 版本兼容性:
              确保您使用的 ROS 2 版本与您的 Python 版本兼容。如果您使用的是较新的 Python 版本,而 ROS 2 发行版不支持该版本,您可能需要考虑使用旧版本的 Python 或升级到支持新版本的 ROS 2 发行版。

            通过以上步骤,您应该能够解决构建过程中遇到的问题。如果问题仍然存在,请检查 setup.py 的其他内容或寻求特定于您使用的 ROS 2 发行版和 Python 版本的社区支持。


            以上为生成回答,仅供参考~

            我是小伊,已接入ChatGpt,所有回复,仅供参考~

            3 1 条回复 最后回复 回复 引用 0
            • 3
              rrrooosss @小伊
              最后由 编辑

              @小伊 在 colcon build报错 中说:

              根据您提供的错误信息以及 setup.py 文件的内容,问题主要集中在 tests_require 选项上,以及可能的 setuptools 版本兼容性问题。以下是一些建议的修改步骤:

              1. 移除 tests_require 选项:
                由于 tests_require 在新版本的 setuptools 中可能不再被支持,您可以考虑移除这个选项。如果您需要指定测试依赖,可以通过其他方式管理,例如在项目的 requirements.txt 文件中列出测试依赖,或者在测试脚本中直接处理。

                修改后的 setup.py 文件如下:

                from setuptools import find_packages, setup
                
                package_name = 'python_pkg'
                
                setup(
                    name=package_name,
                    version='0.0.0',
                    packages=find_packages(exclude=['test']),
                    data_files=[
                        ('share/ament_index/resource_index/packages', ['resource/' + package_name]),
                        ('share/' + package_name, ['package.xml']),
                    ],
                    install_requires=['setuptools'],
                    zip_safe=True,
                    maintainer='ros2',
                    maintainer_email='3513232534@QQ.com',
                    description='TODO: Package description',
                    license='Apache-2.0',
                    entry_points={
                        'console_scripts': [
                            'python_node = python_pkg.python_node:main'
                        ],
                    },
                )
                
              2. 更新或指定 setuptools 版本:
                由于您遇到了与 setuptools 版本相关的错误,尝试更新到最新版本的 setuptools,或者指定一个与您的 ROS 2 环境和 setup.py 脚本更兼容的版本。您可以使用以下命令来更新或指定特定版本的 setuptools:

                pip install --upgrade setuptools  # 更新到最新版本
                # 或者指定一个版本
                pip install setuptools==<version>
                

                如果不确定哪个版本兼容,可以尝试几个不同的版本,直到找到一个不会引发错误的版本。

              3. 清理和重建项目:
                在更改 setup.py 或 setuptools 版本后,确保清理之前的构建文件。您可以在工作空间目录下运行以下命令:

                colcon clean
                colcon build
                

                或者,如果您只想构建特定的包,可以使用:

                colcon build --packages-select python_pkg --merge-install
                
              4. 检查 ROS 2 和 Python 版本兼容性:
                确保您使用的 ROS 2 版本与您的 Python 版本兼容。如果您使用的是较新的 Python 版本,而 ROS 2 发行版不支持该版本,您可能需要考虑使用旧版本的 Python 或升级到支持新版本的 ROS 2 发行版。

              通过以上步骤,您应该能够解决构建过程中遇到的问题。如果问题仍然存在,请检查 setup.py 的其他内容或寻求特定于您使用的 ROS 2 发行版和 Python 版本的社区支持。


              以上为生成回答,仅供参考~

              @小伊 在 colcon build报错 中说:

              根据您提供的错误信息以及 setup.py 文件的内容,问题主要集中在 tests_require 选项上,以及可能的 setuptools 版本兼容性问题。以下是一些建议的修改步骤:

              1. 移除 tests_require 选项:
                由于 tests_require 在新版本的 setuptools 中可能不再被支持,您可以考虑移除这个选项。如果您需要指定测试依赖,可以通过其他方式管理,例如在项目的 requirements.txt 文件中列出测试依赖,或者在测试脚本中直接处理。

                修改后的 setup.py 文件如下:

                from setuptools import find_packages, setup
                
                package_name = 'python_pkg'
                
                setup(
                    name=package_name,
                    version='0.0.0',
                    packages=find_packages(exclude=['test']),
                    data_files=[
                        ('share/ament_index/resource_index/packages', ['resource/' + package_name]),
                        ('share/' + package_name, ['package.xml']),
                    ],
                    install_requires=['setuptools'],
                    zip_safe=True,
                    maintainer='ros2',
                    maintainer_email='3513232534@QQ.com',
                    description='TODO: Package description',
                    license='Apache-2.0',
                    entry_points={
                        'console_scripts': [
                            'python_node = python_pkg.python_node:main'
                        ],
                    },
                )
                
              2. 更新或指定 setuptools 版本:
                由于您遇到了与 setuptools 版本相关的错误,尝试更新到最新版本的 setuptools,或者指定一个与您的 ROS 2 环境和 setup.py 脚本更兼容的版本。您可以使用以下命令来更新或指定特定版本的 setuptools:

                pip install --upgrade setuptools  # 更新到最新版本
                # 或者指定一个版本
                pip install setuptools==<version>
                

                如果不确定哪个版本兼容,可以尝试几个不同的版本,直到找到一个不会引发错误的版本。

              3. 清理和重建项目:
                在更改 setup.py 或 setuptools 版本后,确保清理之前的构建文件。您可以在工作空间目录下运行以下命令:

                colcon clean
                colcon build
                

                或者,如果您只想构建特定的包,可以使用:

                colcon build --packages-select python_pkg --merge-install
                
              4. 检查 ROS 2 和 Python 版本兼容性:
                确保您使用的 ROS 2 版本与您的 Python 版本兼容。如果您使用的是较新的 Python 版本,而 ROS 2 发行版不支持该版本,您可能需要考虑使用旧版本的 Python 或升级到支持新版本的 ROS 2 发行版。

              通过以上步骤,您应该能够解决构建过程中遇到的问题。如果问题仍然存在,请检查 setup.py 的其他内容或寻求特定于您使用的 ROS 2 发行版和 Python 版本的社区支持。


              以上为生成回答,仅供参考~

              @小伊 在 colcon build报错 中说:

              根据您提供的错误信息以及 setup.py 文件的内容,问题主要集中在 tests_require 选项上,以及可能的 setuptools 版本兼容性问题。以下是一些建议的修改步骤:

              1. 移除 tests_require 选项:
                由于 tests_require 在新版本的 setuptools 中可能不再被支持,您可以考虑移除这个选项。如果您需要指定测试依赖,可以通过其他方式管理,例如在项目的 requirements.txt 文件中列出测试依赖,或者在测试脚本中直接处理。

                修改后的 setup.py 文件如下:

                from setuptools import find_packages, setup
                
                package_name = 'python_pkg'
                
                setup(
                    name=package_name,
                    version='0.0.0',
                    packages=find_packages(exclude=['test']),
                    data_files=[
                        ('share/ament_index/resource_index/packages', ['resource/' + package_name]),
                        ('share/' + package_name, ['package.xml']),
                    ],
                    install_requires=['setuptools'],
                    zip_safe=True,
                    maintainer='ros2',
                    maintainer_email='3513232534@QQ.com',
                    description='TODO: Package description',
                    license='Apache-2.0',
                    entry_points={
                        'console_scripts': [
                            'python_node = python_pkg.python_node:main'
                        ],
                    },
                )
                
              2. 更新或指定 setuptools 版本:
                由于您遇到了与 setuptools 版本相关的错误,尝试更新到最新版本的 setuptools,或者指定一个与您的 ROS 2 环境和 setup.py 脚本更兼容的版本。您可以使用以下命令来更新或指定特定版本的 setuptools:

                pip install --upgrade setuptools  # 更新到最新版本
                # 或者指定一个版本
                pip install setuptools==<version>
                

                如果不确定哪个版本兼容,可以尝试几个不同的版本,直到找到一个不会引发错误的版本。

              3. 清理和重建项目:
                在更改 setup.py 或 setuptools 版本后,确保清理之前的构建文件。您可以在工作空间目录下运行以下命令:

                colcon clean
                colcon build
                

                或者,如果您只想构建特定的包,可以使用:

                colcon build --packages-select python_pkg --merge-install
                
              4. 检查 ROS 2 和 Python 版本兼容性:
                确保您使用的 ROS 2 版本与您的 Python 版本兼容。如果您使用的是较新的 Python 版本,而 ROS 2 发行版不支持该版本,您可能需要考虑使用旧版本的 Python 或升级到支持新版本的 ROS 2 发行版。

              通过以上步骤,您应该能够解决构建过程中遇到的问题。如果问题仍然存在,请检查 setup.py 的其他内容或寻求特定于您使用的 ROS 2 发行版和 Python 版本的社区支持。


              以上为生成回答,仅供参考~
              现在编译成功,但是install下却没有相应包

              1 条回复 最后回复 回复 引用 0
              • 小伊小
                机器人小伊
                最后由 编辑

                如果 colcon build 成功完成,但安装目录下(通常是 install 文件夹)没有找到相应的包,可能是由以下几个原因导致的:

                1. 包没有被正确安装:

                  • 确保 colcon build 没有任何错误或警告,特别是与安装相关的。
                  • 检查 setup.py 中的 packages 参数是否正确地包含了所有需要安装的包。
                2. 安装目录问题:

                  • 默认情况下,colcon 会将包安装到工作空间中的 install 目录。确认你是否在正确的工作空间目录下运行了 colcon build。
                  • 使用 colcon list 可以查看当前工作空间中有哪些包,确保你的包列在其中。
                3. 环境变量问题:

                  • 确保你的 PYTHONPATH 环境变量包含了安装目录。这通常不需要手动设置,因为 colcon 会管理这些环境变量,但如果你在其他地方运行 Python 脚本,可能需要手动设置。
                  • 使用 source install/setup.bash(或对应的 shell 脚本,如 setup.zsh)来设置环境变量,这样可以让系统知道去哪里找安装的 Python 包。
                4. 包的可见性问题:

                  • 如果你的包是一个 ROS 2 包,确保它的元数据(如 package.xml 和 setup.py)正确无误,并且遵循了 ROS 2 的包结构。
                  • 检查 setup.py 中的 data_files 是否正确指定了资源文件的位置,这对于 ROS 2 包来说很重要。
                5. 权限问题:

                  • 确保你有足够的权限写入安装目录。在某些系统上,你可能需要使用 sudo 来运行 colcon build,但这通常不推荐,因为它可能引入其他权限问题。
                6. 清理和重建:

                  • 有时候,清理旧的构建文件并重新构建可以解决问题。使用 colcon clean 后再运行 colcon build。
                7. 检查输出:

                  • 仔细检查 colcon build 的输出,看看是否有任何关于安装步骤的警告或错误。
                8. 依赖问题:

                  • 确保所有依赖都已正确安装,并且与你的 ROS 2 版本和 Python 版本兼容。

                如果以上步骤都无法解决问题,你可以尝试以下更具体的调试步骤:

                • 在 setup.py 中添加打印语句,以查看哪些文件被包括在包中。
                • 检查 install 目录下的内容,看看是否有与你的包名相对应的文件夹。
                • 在 Python 脚本中尝试导入你的包,看看是否有任何导入错误。
                • 查看 ROS 2 社区或相关论坛,看看是否有其他人遇到并解决了类似的问题。

                以上为生成回答,仅供参考~

                我是小伊,已接入ChatGpt,所有回复,仅供参考~

                1 条回复 最后回复 回复 引用 0
                • 第一个帖子
                  最后一个帖子
                皖ICP备16016415号-7
                Powered by NodeBB | 鱼香ROS