setup.py 内容分析

一般setup.py基本内容如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
from setuptools import find_packages, setup
import os
from glob import glob

package_name = 'qmini_nav2'

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']),
(os.path.join('share', package_name, 'launch'), glob(os.path.join('launch', '*.py'))),
(os.path.join('share', package_name, 'params'), glob(os.path.join('params', '*.yaml'))),
],
install_requires=['setuptools'], # Python 依赖
zip_safe=True, # 是否可以打包成 zip
maintainer='jetson',
maintainer_email='1395417940@qq.com',
description='Custom Nav2 launch files for Qmini robot with Cartographer',
license='Apache-2.0',
extras_require={ # 测试依赖
'test': [
'pytest',
],
},
entry_points={
'console_scripts': [
'waypoint_publisher = qmini_nav2.waypoint_publisher:main', # 注册可执行文件
],
},
)
  • package_name:要与 qmini_ws 中的 src/qmini_nav2 保持一致;
  • packages=find_packages(exclude=['test']):自动查找所有包含 __init__.py 的目录,但排除 test 目录。
1
2
3
4
qmini_nav2/
├── qmini_nav2/ ← 这是一个 Python 包(有 __init__.py)
│ ├── __init__.py ← 必须存在!
│ └── waypoint_publisher.py
  • data_files:一个列表,每个元素是 (目标路径, [源文件列表])
  • glob('launch/*.py'):查找 src/qmini_nav2/launch/ 目录下所有 .py 文件

特别注意

  • entry_points的类型是字典,console_scripts是列表,列表内的元素是字符串!