Python3.9下pip download下载同包多版本报错的解决方法咨询
问题
想要用pip把需求文件里列出的所有包下载到指定目录,同时下载每个包的最新版本和特定版本(比如contexter的最新版和0.1.4版)。用命令python3 -m pip download -r $FILE_TO_READ --dest $PACKAGES_DIR在Python3.6中能正常运行,但在Python3.7及以上版本(当前用3.9)报错:
ERROR: Double requirement given: contexter==0.1.4 (from -r /home/lab/working_environment/packages_to_update.txt (line 15)) (already in contexter (from -r /home/lab/working_environment/packages_to_update.txt (line 14)), name='contexter')
需求文件内容示例:
astpretty bleach blivet bottle build certifi cffi chardet charset-normalizer colorama commentjson conan configobj contexter contexter==0.1.4 cryptography dasbus dbus-python decorator
要求无需拆分或修改需求文件解决报错。
解决方案
Python3.7+对应的pip版本(一般为19.0+)默认启用了更严格的依赖冲突检查,不允许同一个包在需求文件中出现多次不同版本的需求。可以通过逐行处理需求文件的方式规避这个检查,具体命令如下:
cat $FILE_TO_READ | xargs -n1 python3 -m pip download --dest $PACKAGES_DIR
原理说明
cat $FILE_TO_READ读取需求文件的全部内容xargs -n1将每行内容作为单独参数传递给后续的pip命令- 每次pip仅处理一个包的需求,不会检测到同一个包的重复需求,从而成功下载最新版和指定版本的包
如果需要仅下载目标包本身、忽略依赖包的下载,可添加--no-deps参数:
cat $FILE_TO_READ | xargs -n1 python3 -m pip download --no-deps --dest $PACKAGES_DIR
内容的提问来源于stack exchange,提问作者Sync
相关产品推荐
相关产品推荐

