Ubuntu安装requirements.txt依赖报python-apt版本匹配错误如何解决
问题现象
在Ubuntu系统执行pip install -r requirements.txt安装依赖时返回如下报错:
ERROR: Couldn't find version that satisfies the requirement python-apt2.0.0+ubuntu0.20.4.4(from version:0.0.0,0.7.8)
ERROR: No matching distribution found for python-apt2.0.0+ubuntu0.20.4.4
问题原因
带+ubuntu0.20.4.4后缀的python-apt是Ubuntu 20.04官方apt源内置的系统定制包,不会发布到PyPI公共源,pip无法直接检索安装。这类问题基本都是直接用pip freeze导出全环境依赖时,把系统预装的apt管理包混进了requirements.txt,跨环境或者用pip安装时就会触发找不到包的错误。
解决步骤
- 清理无效依赖条目
打开requirements.txt文件,直接删除python-apt==2.0.0+ubuntu0.20.4.4这一行,同时顺带检查删掉其他带Ubuntu版本后缀、属于系统预装的包(比如command-not-found、ubuntu-drivers-common这类),这类包由系统apt管理,不属于pip维护的第三方依赖范畴,不应该出现在pip的依赖列表里。 - 按需安装系统版本的python-apt
如果你的项目确实依赖python-apt能力,不要用pip安装,直接通过系统包管理器安装匹配当前系统版本的包:
如果是在Python虚拟环境中使用,安装完系统包后,把系统site-packages路径下的sudo apt update && sudo apt install -y python3-aptapt相关目录软链到虚拟环境的site-packages目录即可,不要强行指定版本用pip安装。 - 规范依赖导出方式,避免后续复发
后续导出项目依赖不要直接用pip freeze,该命令会导出当前环境所有安装过的包,很容易混入系统级依赖。改用pipreqs扫描项目代码的实际导入语句生成依赖列表:- 安装工具:
sudo apt install -y pipreqs - 进入项目根目录执行生成命令:
pipreqs . --encoding=utf8 --force
生成的requirements.txt只会包含项目实际用到、可通过pip正常安装的第三方包,不会混入系统专属依赖。
- 安装工具:
额外注意
如果你当前使用的Ubuntu版本不是20.04(比如18.04、22.04、24.04),系统源自带的python-apt版本本身就不是2.0.0+ubuntu0.20.4.4,强行锁这个版本必然安装失败,删除版本锁让系统自动匹配对应版本即可,或者使用Ubuntu 20.04环境运行项目。
内容的提问来源于stack exchange,提问作者Haseeb Ali
相关产品推荐
相关产品推荐

