我正在构建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
如何跳过重新安装压缩包?
答案 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
解决方案。