一个特别奇怪的 pip 包依赖版本问题 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
Sign Up Now
For Existing Member  Sign In
推荐学习书目
Learn Python the Hard Way
Python Sites
PyPI - Python Package Index
http://diveintopython.org/toc/index.html
Pocoo
值得关注的项目
PyPy
Celery
Jinja2
Read the Docs
gevent
pyenv
virtualenv
Stackless Python
Beautiful Soup
结巴中文分词
Green Unicorn
Sentry
Shovel
Pyflakes
pytest
Python 编程
pep8 Checker
Styles
PEP 8
Google Python Style Guide
Code Style from The Hitchhiker's Guide
dangyuluo

一个特别奇怪的 pip 包依赖版本问题

  •  
  •   dangyuluo Jun 10, 2021 1903 views

    我有一个自己打包 Docker image,里面安装了 numpy 和 matplotlib 。一年前我调试好后 freeze 了所有的 pip package 版本,numpy==1.19.2, matplotlib==3.3.2,自此之后一直没有重新打包 Docker image 。

    最近我需要更改一些东西,因此需要重新打包一下,但是安装这两个 pip 包的时候居然失败了!

    RUN pip3 install numpy==1.19.2 matplotlib==3.3.2 Collecting numpy==1.19.2 Downloading numpy-1.19.2-cp36-cp36m-manylinux2014_aarch64.whl (12.2 MB) Collecting matplotlib==3.3.2 Downloading matplotlib-3.3.2.tar.gz (37.9 MB) ERROR: Command errored out with exit status 1: command: /usr/bin/python3 -c 'import sys, setuptools, tokenize; sys.argv[0] = '"'"'/tmp/pip-install-vrrk_zeh/matplotlib/setup.py'"'" '; __file__='"'"'/tmp/pip-install-vrrk_zeh/matplotlib/setup.py'"'"';f=getattr(tokenize, '"'"'open'"'"', open)(__file__);code=f.read().rep lace('"'"'\r\n'"'"', '"'"'\n'"'"');f.close();exec(compile(code, __file__, '"'"'exec'"'"'))' egg_info --egg-base /tmp/pip-pip-egg-info-13y 9rlc7 ... File "/usr/lib/python3/dist-packages/setuptools/sandbox.py", line 250, in run_setup _execfile(setup_script, ns) File "/usr/lib/python3/dist-packages/setuptools/sandbox.py", line 45, in _execfile exec(code, globals, locals) File "/tmp/easy_install-sdqaijla/numpy-1.21.0rc2/setup.py", line 34, in <module> # The setuptools version of sdist adds a setup.cfg file to the tree. RuntimeError: Python version >= 3.7 required. 

    错误似乎是在说Matplotlib想安装更新的numpy-1.21.0 which 需要 Python3.7 以上。但是我明明有在命令行里指定我想要的 numpy 版本呀?为什么 pip 没有执行呢?

    另外,如果我单独安装numpy,再安装matplotlib问题就消失了。

    RUN pip3 install numpy==1.19.2 RUN pip3 install matplotlib==3.3.2 # everything works fine 

    再另外,这个问题只出现在 aarch64 机器上,x86_64 机器一点问题也没有。

    哪位能看出来问题所在?谢谢

    5 replies    2021-06-11 00:52:10 +08:00
    no1xsyzy
        1
    no1xsyzy  
       Jun 10, 2021   1
    这应当是一个 package resolve 的问题
    matplotlib==3.3.2 之后发现想要 numpy,但当前环境下没有 numpy,就自动地寻找了最新版本的 numpy==1.21.0,然后发现 resolve 不行
    这不合理

    不清楚 -r 的话会不会同步,但看你是先 pip freeze 出来的应当是 -r 先发现的吧

    不确定这些工具具体是否能处理,且列一下:
    pip-tools
    Pipenv
    poetry
    no1xsyzy
        2
    no1xsyzy  
       Jun 10, 2021
    哦,你是在 Dockerfile 里面 RUN 的啊……
    你可能需要 pip freeze > requirements.txt 然后 pip install -r requirements.txt
    或者上述几个新一代版本依赖管理工具
    xuboying
        3
    xuboying  
       Jun 10, 2021   1
    可能是 pip 的 bug ?
    或者应该用 pip -r file 来实现?
    dangyuluo
        4
    dangyuluo  
    OP
       Jun 10, 2021
    @no1xsyzy 谢谢,似乎是 python 20.2 之前的 resolver 版本太弱鸡了

    https://github.com/pypa/pip/issues/988
    Hieast
        5
    Hieast  
       Jun 11, 2021 via iPhone
    原因上面讨论过了,pip -r 也不管用,我看到有的项目为了简化依赖管理,分了几个 txt 文件依次用 pip 装,就跟你手动先装 numpy 是一样的。

    感觉可以试试 pipenv sync
    About     Help     Advertise     Blog     API     FAQ     Solana     891 Online   Highest 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 34ms UTC 22:06 PVG 06:06 LAX 15:06 JFK 18:06
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86