在python:3.6.8容器内pip安装自定义Python包失败(宿主机可正常安装)
问题1:pip是否默认从PyPI查找mypkg?
是,在你没有显式指定本地路径、私有源的前提下,pip会默认从官方PyPI索引检索包,不会自动扫描本地文件系统匹配同名的自研包。
问题2:操作指令存在的问题
- pip安装指令参数错误
你本地执行pip install .时,末尾的.代表告诉pip安装当前目录下的本地包;但Dockerfile中你写的是pip install -v mypkg,此时pip会把mypkg当作PyPI公共包名去检索,自然找不到你的私有自研包。
你可以选择两种写法修正:
- 进入包根目录后安装:
cd /pytmp/mypkg && pip install . - 直接指定本地包绝对路径安装:
pip install /pytmp/mypkg
隐藏版本兼容问题
你使用的纯setup.cfg配置方案,需要setuptools版本≥30.3.0才支持,python:3.6.8镜像内置的setuptools版本可能低于这个要求,就算路径正确也会安装失败,建议安装自研包前先升级基础工具:pip install -U pip setuptools解压路径校验提醒
ADD mypkg.tar.gz /pytmp/mypkg指令会自动解压压缩包,你需要确认你打包的mypkg.tar.gz的根目录直接是setup.cfg所在的目录,而不是外层又嵌套了一层mypkg文件夹,否则实际包路径会变成/pytmp/mypkg/mypkg,也会触发找不到包的错误。
修正后的Dockerfile示例
RUN cd /pytmp && \ virtualenv -p /usr/local/bin/python3 venv && \ source venv/bin/activate && \ pip install -U pip setuptools && \ pip install -v /pytmp/mypkg RUN cd /pytmp/venv/lib/python3.6/ && \ zip -r /python_packages.zip site-packages/
内容的提问来源于stack exchange,提问作者Raphaël Ventura
相关产品推荐
相关产品推荐

