pip始终重新安装压缩的软件包,即使已安装

时间:2019-05-08 15:48:01

标签: python pip

我正在构建requirements.txt文件,以通过pip在我的团队中部署一组Python软件包。 我已将软件包本身保存在本地服务器上,以最大程度地减少Internet下载,因此我在文件夹中有一堆wheel和gz / zip文件。

示例test.txt:

packages\networkx-2.3.zip
packages\cx_Oracle-7.1.3-cp37-cp37m-win_amd64.whl
packages\SQLAlchemy-1.3.3.tar.gz

对于whl文件,pip会正确跳过已安装的软件包,但对于gz / zip软件包,它将始终重新安装它们。

这是通过pip运行test.txt文件时得到的:

λ pip install -r test.txt
Processing c:\users\xxxx\dev\python deploy\packages\networkx-2.3.zip
Processing c:\users\xxxx\dev\python deploy\packages\sqlalchemy-1.3.3.tar.gz
Requirement already satisfied: cx-Oracle==7.1.3 from file:///C:/Users/xxxx/dev/Python%20deploy/packages/cx_Oracle-7.1.3-cp37-cp37m-win_amd64.whl in c:\users\xxxx\appdata\local\programs\python\python37\lib\site-packages (from -r test.txt (line 2)) (7.1.3)
Requirement already satisfied: decorator>=4.3.0 in c:\users\xxxx\appdata\local\programs\python\python37\lib\site-packages (from networkx==2.3->-r test.txt (line 1)) (4.4.0)
Installing collected packages: networkx, SQLAlchemy
  Found existing installation: networkx 2.3
    Uninstalling networkx-2.3:
      Successfully uninstalled networkx-2.3
  Running setup.py install for networkx ... done
  Found existing installation: SQLAlchemy 1.3.3
    Uninstalling SQLAlchemy-1.3.3:
      Successfully uninstalled SQLAlchemy-1.3.3
  Running setup.py install for SQLAlchemy ... done
Successfully installed SQLAlchemy-1.3.3 networkx-2.3

如何跳过重新安装压缩包?

1 个答案:

答案 0 :(得分:0)

此行为是可预期的,因为pip无法将wheel文件的哈希与已安装的软件包进行比较。要么将依赖项规范与find-links结合使用,要么使用test.txt中文件的直接路径:

--find-links=packages
networkx==2.3
SQLAlchemy==1.3.3

或使用以下方式将源dists转换为转轮

$ pip wheel -r test.txt --wheel-dir packages

并使用结果的转轮代替test.txt中的源距离:

packages\networkx-2.3-py2.py3-none-any.whl
packages\SQLAlchemy-1.3.3-cp36-cp36m-win_amd64.whl

由于已经预装了车轮,因此这也可以缩短安装时间。但是,带有C扩展名的软件包(在这种情况下,例如SQLAlchemy)将产生与平台或python无关的轮子,例如SQLAlchemy-1.3.3-cp36-cp36m-win_amd64.whl仅可在64位Windows上为Python 3.6安装。如果您的团队成员具有不同的工作环境(例如,有些使用WIndows,有些使用MacOS等),则需要为每种环境提供预构建的轮子;在这种情况下,请坚持使用find-links解决方案。