【踩坑无数】离线安装python依赖包

2024-01-08 15:08:33

离线环境安装依赖包

在离线环境下因为没有网络无法直接使用pip install下载依赖包,只能靠上传文件来安装
一般会有这个想法:在有网的地方下载所有依赖包,上传到离线环境,然后一个个安装

随后就会遇到以下问题:

  1. 手动人工确认依赖关系
  2. 手动人工确认安装顺序

然后就会踩到这些坑:

  1. 你会发现A依赖B,于是你下载了B但是你又发现B又依赖CDE,E又依赖F,于是血压逐渐升高了。
  2. 你发现你需要搞一个依赖的“族谱”才能弄明白他们的安装顺序,你一边下载,一遍帮助依赖包整理“族谱”。
  3. 你发现你必须下载和python版本匹配的包,而且你所需的依赖包之间也存在着版本的相互制约关系,搞不好就乱了套了。
  4. 心平气和应对他人疑问句:“你不会在一个个的下载,一个个的装吧?”

那么如何快速确定需要安装的依赖包之间的依赖关系及版本制约,且快速获取到安装文件呢?
答案是:好好使用pip

操作步骤

在有网机器下载依赖包

pip download -d ./放包目录 要下的包

做一个文件列表

在依赖包的同级目录下(当然也没说必须得同级目录下),把刚刚下载的文件名写入到一个文件中,例如requirements.txt:

APScheduler-3.10.4-py3-none-any.whl
asgiref-3.4.1-py3-none-any.whl
backports.zoneinfo-0.2.1-cp36-cp36m-manylinux1_x86_64.whl
Django-3.2.23-py3-none-any.whl
django_apscheduler-0.6.2-py3-none-any.whl
django_js_asset-2.0.0-py3-none-any.whl
importlib_metadata-4.8.3-py3-none-any.whl
importlib_resources-5.4.0-py3-none-any.whl
pytz-2023.3.post1-py2.py3-none-any.whl
pytz_deprecation_shim-0.1.0.post0-py2.py3-none-any.whl
six-1.16.0-py2.py3-none-any.whl
sqlparse-0.4.4-py3-none-any.whl
typing_extensions-4.1.1-py3-none-any.whl
tzdata-2023.4-py2.py3-none-any.whl
tzlocal-4.2-py3-none-any.whl
zipp-3.6.0-py3-none-any.whl

离线环境安装

把requirements.txt中涉及到的文件也就是要安装的文件,拷贝到离线环境,执行命令:

pip install --no-index --find-links=./依赖包目录 -r requirements.txt

检查、结束

你可以使用

pip list

查看依赖包安装情况

说明

  1. requirements.txt中的依赖名称需要自己手动调整吗?
  • requirements.txt 文件中的依赖包并不需要按照它们之间的依赖关系排序,pip会自动处理这些依赖关系。当你运行 pip install -r requirements.txt 时,pip会解析每个库的依赖,并确保先安装所有必要的前置依赖。
  1. pip install --no-index --find-links=./packages -r requirements.txt这个命令只能安装whl文件吗?,无法安装tar这种压缩文件吧?
  • pip install --no-index --find-links=./packages -r requirements.txt 这个命令不仅可以安装whl文件,也可以处理tar.gz或zip格式的源码包。当pip在指定目录下查找依赖时,如果发现匹配的源码包,它会解压并执行其中的setup.py进行安装。
  • 但是,使用wheel文件(.whl)通常比源码包(.tar.gz 或 .zip)安装更快捷,因为wheel是预编译的二进制分发格式,无需再进行编译步骤。因此,在离线环境下,如果你有选择的话,推荐优先使用wheel文件以获得更好的性能和可靠性。
  1. 详细讲解一下pip install --no-index --find-links=./依赖包目录 -r requirements.txt这条命令
    pip install --no-index --find-links=./依赖包目录 -r requirements.txt 是一个用于离线安装Python依赖包的命令。下面是对各个参数详细说明:
  • pip install: 这是pip的基本命令,用于安装指定的Python包。
  • –no-index: 这个选项告诉pip不要从默认的Python Package Index(PyPI)或任何其他索引服务器上查找和下载包。在离线环境下使用此选项非常重要,因为它避免了pip尝试在线查找和下载依赖包。
    –find-links: 这个选项后面跟随的是本地文件系统的路径,指向包含wheel文件或者源码包(tar.gz或zip格式)的目录。当pip需要安装某个包时,它会首先在这个目录下查找是否有匹配的包文件。 例如:–find-links=./依赖包目录 表示pip会在当前工作目录下的“依赖包目录”中寻找要安装的包。
  • -r requirements.txt: 这个选项指定了一个文本文件,其中包含了项目所需的Python包及其版本信息。pip会读取这个文件,并按照文件中列出的顺序逐个尝试安装这些包。即使包之间存在依赖关系,pip也会自动处理并确保正确安装所有依赖项。
    总结来说,这个命令的作用是在离线环境下,根据 requirements.txt 文件中的依赖列表,从指定的本地目录中找到相应的包文件进行安装。这样可以在没有互联网连接的情况下搭建出与线上环境一致的Python项目依赖环境。

文章来源:https://blog.csdn.net/qq_45800977/article/details/135382363
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。