pip安装的pymavlink与PyPI直接下载内容不一致的原因及规避方法
关于pymavlink安装后目录与PyPI包内容差异的问题
操作过程
执行以下命令安装最新版pymavlink:
pip install pymavlink
安装日志输出:
Collecting pymavlink Using cached pymavlink-2.4.41-py3-none-any.whl.metadata (6.2 kB) Requirement already satisfied: future in /home/shared/conda/envs/swarm/lib/python3.10/site-packages (from pymavlink) (1.0.0) Requirement already satisfied: lxml in /home/shared/conda/envs/swarm/lib/python3.10/site-packages (from pymavlink) (5.3.0) Using cached pymavlink-2.4.41-py3-none-any.whl (11.6 MB) Installing collected packages: pymavlink Successfully installed pymavlink-2.4.41
目录内容对比
- pip安装后的源目录:
/dialects /generator /message_definitions /__pycache__ /CSVReader.py /DFReader.py /fgFDM.py /__init__.py /mavexpression.py /mavextra.py /mavparm.py /mavtestgen.py /mavutil.py /mavwp.py /quaternion.py /rotmat.py /setup.py
- 直接从PyPI下载的包内容:
/dialects /generator /message_definitions /pymavlink.egg-info /tests /tools /COPYING /CSVReader.py /DFReader.py /fgFDM.py /__init__.py /mavexpression.py /mavextra.py /mavparm.py /mavtestgen.py /mavutil.py /mavwp.py /PKG-INFO /pyproject.toml /quaternion.py /README.md /rotmat.py /setup.cfg /setup.py
可以看到,pip安装后缺失了tests、tools目录,以及COPYING、README.md、pyproject.toml等文件。
原因分析
- Wheel包构建策略:PyPI上的pymavlink提供了wheel格式的预构建发布包,这类包在构建时会通过
setup.py或pyproject.toml的配置,排除测试用例、开发工具、文档等非运行必需的文件,以此减小包体积,只保留核心运行代码。 - 包类型差异:直接从PyPI下载的通常是源码包(sdist格式),这类包包含项目完整源码,包括测试、文档、配置文件等所有内容;而pip默认优先安装体积更小、安装更快的wheel包,两者内容自然存在差异。
避免方法
- 从源码仓库安装:克隆项目仓库后执行本地安装,可保留完整项目文件:
git clone https://github.com/ArduPilot/pymavlink.git cd pymavlink pip install .
- 安装PyPI源码包:从PyPI下载源码包(sdist格式,如
.tar.gz文件),再执行本地安装:
# 示例:下载对应版本源码包后执行安装 pip install pymavlink-2.4.41.tar.gz
更新说明
已针对该差异问题在项目的issue跟踪平台提交反馈。
内容的提问来源于stack exchange,提问作者tribbloid
相关产品推荐
相关产品推荐

