从源码安装修改版nuScenes-devkit报错如何解决
nuScenes-devkit 源码安装故障排查与解决
基础环境与问题背景
- 目标安装包:基于公开nuScenes-devkit项目做了自定义修改的私有分支版本
- 运行环境:Ubuntu 20.04 LTS、Python 3.8.10、pip 22.1.2,所有操作均在python venv创建的独立虚拟环境中执行
- 故障表现:在setup目录下尝试多种安装命令、调整权限均安装失败
已尝试操作与对应报错
- 操作1:在setup文件夹下执行
pip install .
核心报错:FileNotFoundError: [Errno 2] No such file or directory: '../README.md',手动通过vim ../README.md可正常访问该文件,完整报错核心片段:
ERROR: Command errored out with exit status 1: command: /mnt/nvme1n1/venvs/enp2/bin/python3 -c 'import sys, setuptools, tokenize; sys.argv[0] = '/tmp/pip-req-build-wfs5ujhi/setup.py'; __file__='/tmp/pip-req-build-wfs5ujhi/setup.py';f=getattr(tokenize, 'open', open)(__file__);code=f.read().replace('\r\n', '\n');f.close();exec(compile(code, __file__, 'exec'))' egg_info --egg-base /tmp/pip-req-build-wfs5ujhi/pip-egg-info cwd: /tmp/pip-req-build-wfs5ujhi/ Complete output (5 lines): Traceback (most recent call last): File "<string>", line 1, in <module> File "/tmp/pip-req-build-wfs5ujhi/setup.py", line 5, in <module> with open('../README.md', 'r') as fh: FileNotFoundError: [Errno 2] No such file or directory: '../README.md'
- 操作2:在setup文件夹下执行
python setup.py install
核心报错:error: package directory 'python-sdk/nuscenes_devkit/egg-info' does not exist - 操作3:在setup文件夹下执行
pip install -e .
核心报错:元数据生成阶段失败,提示error: package directory 'python-sdk/nuscenes_devkit/egg-info' does not exist - 操作4:在setup文件夹下执行
sudo pip install -e .
核心报错:和操作2报错完全一致,权限调整未解决问题
故障根因
- README找不到的报错:执行
pip install .时,pip会将当前目录的源码拷贝到临时构建目录运行setup.py,setup.py中写死的相对路径../README.md在临时构建目录下无对应文件,触发文件不存在错误。 - egg-info目录不存在的报错:执行安装的工作目录错误。nuScenes-devkit的setup.py所有路径配置都是以仓库根目录为基准,在setup子目录下执行安装命令时,相对路径完全错位,setuptools会把生成过程中临时创建的egg-info目录识别为待打包的源码目录,自然找不到对应路径。
- 加sudo执行无效的原因:sudo会默认调用系统全局的Python解释器和pip,完全绕过你创建的venv虚拟环境,和你要在虚拟环境中安装包的目标完全相悖。
正确安装步骤
- 切换到nuScenes-devkit仓库根目录,执行
ls确认当前目录下能直接看到README.md、python-sdk、setup三个文件/文件夹,不要进入setup子目录。 - 清理之前失败安装生成的临时残留文件:
find . -name "*.egg-info" -type d -exec rm -rf {} + rm -rf build/ dist/
- 激活你提前创建的venv虚拟环境,确认
which pip返回的路径是你虚拟环境目录下的pip路径,不要加sudo。 - 执行安装命令:
- 如果需要保留本地代码修改的热更新(自定义修改场景推荐用可编辑模式),执行:
pip install -e ./setup- 如果需要做常规的静态源码安装,执行:
pip install ./setup
若安装过程中提示缺少系统依赖,可提前执行以下命令安装基础编译依赖:
sudo apt update && sudo apt install -y python3-dev build-essential libgeos-dev
内容的提问来源于stack exchange,提问作者adroit.levees.0r
相关产品推荐
相关产品推荐

