Python pip总是重新安装压缩包,即使已经安装

Python pip总是重新安装压缩包,即使已经安装,python,pip,Python,Pip,我正在构建一个requirements.txt文件,以便通过pip在我的团队中部署一组Python包。 我将这些包保存在本地服务器上,以尽量减少internet下载,因此我在一个文件夹中有一堆轮子和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正确地跳过已经安装

我正在构建一个requirements.txt文件,以便通过pip在我的团队中部署一组Python包。 我将这些包保存在本地服务器上,以尽量减少internet下载,因此我在一个文件夹中有一堆轮子和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

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

此行为是预期的,因为
pip
无法将滚轮文件哈希与已安装的包进行比较。使用依赖项规范结合
查找链接
,而不是直接指向
test.txt中文件的路径

--find-links=packages
networkx==2.3
SQLAlchemy==1.3.3
packages\networkx-2.3-py2.py3-none-any.whl
packages\SQLAlchemy-1.3.3-cp36-cp36m-win_amd64.whl
或使用将源距离转换为控制盘

$ pip wheel -r test.txt --wheel-dir packages
并在
test.txt
中使用生成的控制盘而不是源距离:

--find-links=packages
networkx==2.3
SQLAlchemy==1.3.3
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等),您需要为每个环境提供预构建的控制盘;在这种情况下,请坚持使用
查找链接
解决方案。

按照您的建议,为我们的项目构建轮子解决了问题。谢谢。很高兴我能帮忙!