如何离线安装软件包?

2024-11-22 08:47:00
admin
原创
5
摘要:问题描述:从 pypi 下载 python 包及其依赖项以便在另一台机器上进行离线安装的最佳方法是什么?有没有简单的方法可以用 pip 或 easy_install 来做到这一点?我正在尝试在未连接到互联网的 FreeBSD 框上安装请求库。解决方案 1:在可以访问互联网的系统上pipdownload命令允许...

问题描述:

从 pypi 下载 python 包及其依赖项以便在另一台机器上进行离线安装的最佳方法是什么?有没有简单的方法可以用 pip 或 easy_install 来做到这一点?我正在尝试在未连接到互联网的 FreeBSD 框上安装请求库。


解决方案 1:

在可以访问互联网的系统上

pipdownload命令允许您下载软件包但不安装它们:

pip download -r requirements.txt

(在以前版本的 pip 中,它的拼写为pip install --download -r requirements.txt。)

在无法访问互联网的系统上

将下载的软件包复制到此系统,然后就可以使用

pip install --no-index --find-links /path/to/download/dir/ -r requirements.txt

安装这些下载的模块,无需访问网络。

解决方案 2:

如果要离线安装 Python 库及其依赖项,请在具有相同操作系统、网络连接和安装 Python 的机器上执行以下步骤:

  1. 创建一个requirements.txt包含如下内容的文件(这些是您想要下载的库):

Flask==0.12
requests>=2.7.0
scikit-learn==0.19.1
numpy==1.14.3
pandas==0.22.0

创建需求文件的一个选项是使用pip freeze >requirements.txt。这将列出您环境中的所有库。然后您可以进入requirements.txt并删除不必要的库。

  1. 执行命令mkdir wheelhouse && pip download -r requirements.txt -d wheelhouse将库及其依赖项下载到目录wheelhouse

  2. 将 requirements.txt 文件复制到wheelhouse目录中

  3. wheelhouse.tar.gz归档驾驶室tar -zcf wheelhouse.tar.gz wheelhouse

然后上传wheelhouse.tar.gz到目标机器:

  1. 执行tar -zxf wheelhouse.tar.gz以提取文件

  2. 执行pip install -r wheelhouse/requirements.txt --no-index --find-links wheelhouse安装库及其依赖项

解决方案 3:

如果包在 PYPI 上,请将其及其依赖项下载到某个本地目录。例如

$ mkdir /pypi && cd /pypi
$ ls -la
  -rw-r--r-- 1 pavel 员工 237954 4月19日 11:31 Flask-WTF-0.6.tar.gz
  -rw-r--r-- 1 pavel 员工 389741 二月 22 17:10 Jinja2-2.6.tar.gz
  -rw-r--r-- 1 pavel 员工 70305 4月 11 00:28 MySQL-python-1.2.3.tar.gz
  -rw-r--r-- 1 pavel 员工 2597214 4月 10 18:26 SQLAlchemy-0.7.6.tar.gz
  -rw-r--r-- 1 pavel 员工 1108056 2 月 22 日 17:10 Werkzeug-0.8.2.tar.gz
  -rw-r--r-- 1 pavel 员工 488207 4 月 10 日 18:26 boto-2.3.0.tar.gz
  -rw-r--r-- 1 pavel 员工 490192 4月 16 12:00 flask-0.9-dev-2a6c80a.tar.gz

有些软件包可能需要手动归档到类似的 tarball 中。当我想要某个东西的较新(较不稳定)版本时,我经常这样做。有些软件包不在 PYPI 上,因此同样适用于它们。

假设您在 中有一个格式正确的 Python 应用程序~/src/myapp~/src/myapp/setup.py将有install_requires一个列表,其中提到您目录中的一个或多个内容/pypi。像这样:

  install_requires=[
    'boto',
    'Flask',
    'Werkzeug',
    # and so on

如果您希望能够运行具有所有必要依赖项的应用程序,同时仍对其进行破解,您可以执行以下操作:

$ cd ~/src/myapp
$ python setup.py 开发 --always-unzip --allow-hosts=None --find-links=/pypi

这样,您的应用程序将直接从源目录执行。您可以对某些内容进行修改,然后重新运行应用程序,而无需重建任何内容。

如果你想将你的应用程序及其依赖项安装到当前的 Python 环境中,你可以执行以下操作:

$ cd ~/src/myapp
$ easy_install--always-unzip--allow-hosts=None--find-links=/pypi 。

在这两种情况下,如果目录中不存在一个或多个依赖项,构建将失败/pypi。它不会尝试从 Internet 随意安装缺失的内容。

我强烈建议在活动的虚拟环境setup.py develop ...中调用和,以避免污染全局 Python 环境。这(即 virtualenv)几乎是可行的方法。切勿在全局 Python 环境中安装任何东西。easy_install ...

如果您构建应用程序的机器与要部署应用程序的机器具有相同的架构,那么您只需将整个虚拟环境目录打包成 tarball 即可easy_install。不过,在打包之前,您必须使虚拟环境目录可重定位(请参阅--relocatable选项)。注意:目标机器需要安装相同版本的 Python,并且您的应用程序可能具有的任何基于 C 的依赖项也必须预先安装在那里(例如,如果您依赖PIL,则必须预先安装 libpng、libjpeg 等)。

解决方案 4:

让我一步一步地介绍一下这个过程:

  1. 在连接到互联网的计算机上创建一个文件夹。

   $ mkdir packages
   $ cd packages
  1. 打开命令提示符或 shell 并执行以下命令:

假设你想要的包是 tensorflow

$ pip download tensorflow

  1. 现在,在目标计算机上复制packages文件夹并应用以下命令

  $ cd packages
  $ pip install 'tensorflow-xyz.whl' --no-index --find-links '.'

请注意,tensorflow-xyz.whl必须用所需包的原始名称替换。

解决方案 5:

离线 Python。为此,我使用 virtualenv(隔离 Python 环境)

1)使用 pip 在线安装 virtualenv:

pip install virtualenv --user

或者使用 whl 离线安装:转到此链接,下载最新版本(.whl 或 tar.gz)并使用以下命令进行安装:

pip install virtualenv-15.1.0-py2.py3-none-any.whl --user

通过使用,--user您不需要使用sudo pip…

2)使用虚拟环境

在线机器上选择一个带有终端的目录cd并运行此代码:

python -m virtualenv myenv
cd myenv
source bin/activate
pip install Flask

安装完所有软件包后,你必须requirements.txt在虚拟环境处于活动状态时生成一个 so,写入

pip freeze > requirements.txt

打开一个新终端并创建另一个环境,例如myenv2

python -m virtualenv myenv2
cd myenv2
source bin/activate
cd -
ls

现在您可以转到您的离线文件夹,其中包含您的requirements.txttranferred_packages文件夹。使用以下代码下载包并将它们全部放入tranferred_packages文件夹中。

pip download -r requirements.txt

将你的脱机文件夹带到脱机计算机然后

python -m virtualenv myenv2
cd myenv2
source bin/activate
cd -
cd offline
pip install --no-index --find-links="./tranferred_packages" -r requirements.txt

离线文件夹中有什么 [requirements.txt,tranferred_pa​​ckages {Flask-0.10.1.tar.gz,...}]

检查你的包裹清单

pip list

注意:由于我们是 2017 年,最好使用 python 3。您可以使用此命令创建 python 3 virtualenv。

virtualenv -p python3 envname

解决方案 6:

我遇到了类似的问题。我必须以同样的方式安装它,就像我们在 pypi 中安装的那样。

我做了以下事情:

  1. 创建一个目录来存储可以访问互联网的机器上的所有软件包。

mkdir -p /path/to/packages/
  1. 下载所有包到路径

编辑:您还可以尝试:

python3 -m pip wheel --no-cache-dir -r requirements.txt -w /path/to/packages
pip download -r requirements.txt -d /path/to/packages

Eg:- ls /root/wheelhouse/  # **/root/wheelhouse** is my **/path/to/packages/**
total 4524
-rw-r--r--. 1 root root   16667 May 23  2017 incremental-17.5.0-py2.py3-none-any.whl
-rw-r--r--. 1 root root   34713 Sep  1 10:21 attrs-18.2.0-py2.py3-none-any.whl
-rw-r--r--. 1 root root 3088398 Oct 15 14:41 Twisted-18.9.0.tar.bz2
-rw-r--r--. 1 root root  133356 Jan 28 15:58 chardet-3.0.4-py2.py3-none-any.whl
-rw-r--r--. 1 root root  154154 Jan 28 15:58 certifi-2018.11.29-py2.py3-none-any.whl
-rw-r--r--. 1 root root   57987 Jan 28 15:58 requests-2.21.0-py2.py3-none-any.whl
-rw-r--r--. 1 root root   58594 Jan 28 15:58 idna-2.8-py2.py3-none-any.whl
-rw-r--r--. 1 root root  118086 Jan 28 15:59 urllib3-1.24.1-py2.py3-none-any.whl
-rw-r--r--. 1 root root   47229 Jan 28 15:59 tqdm-4.30.0-py2.py3-none-any.whl
-rw-r--r--. 1 root root    7922 Jan 28 16:13 constantly-15.1.0-py2.py3-none-any.whl
-rw-r--r--. 1 root root  164706 Jan 28 16:14 zope.interface-4.6.0-cp27-cp27mu-manylinux1_x86_64.whl
-rw-r--r--. 1 root root  573841 Jan 28 16:14 setuptools-40.7.0-py2.py3-none-any.whl
-rw-r--r--. 1 root root   37638 Jan 28 16:15 Automat-0.7.0-py2.py3-none-any.whl
-rw-r--r--. 1 root root   37905 Jan 28 16:15 hyperlink-18.0.0-py2.py3-none-any.whl
-rw-r--r--. 1 root root   52311 Jan 28 16:15 PyHamcrest-1.9.0-py2.py3-none-any.whl
 -rw-r--r--. 1 root root   10586 Jan 28 16:15 six-1.12.0-py2.py3-none-any.whl
  1. 将软件包目录压缩并复制到没有互联网访问权限的机器上。然后执行以下操作:

cd /path/to/packages/
tar -cvzf packages.tar.gz .  # not the . (dot) at the end

将packages.tar.gz复制到没有互联网访问的目标机器。

  1. 在没有互联网访问的机器上,执行以下操作(假设您将 tarred 包复制到当前机器中的/path/to/package/ )

cd /path/to/packages/
tar -xvzf packages.tar.gz
mkdir -p $HOME/.config/pip/
vi $HOME/.config/pip/pip.conf

并将以下内容粘贴进去并保存。

[global]
timeout = 10
find-links = file:///path/to/package/
no-cache-dir = true
no-index = true
  1. 最后,我建议您使用某种形式virtualenv来安装软件包。

virtualenv -p python2 venv # use python3, if you are on python3
source ./venv/bin/activate
pip install <package>

您应该能够下载目录/path/to/package/中的所有模块。

注意:我这样做只是因为我无法添加选项或更改安装模块的方式。否则我会这样做

pip install --no-index --find-links /path/to/download/dir/ -r requirements.txt

解决方案 7:

对于其他平台和其他 Python 版本

要下载其他平台的 Python 软件包,需要将--platform参数[1]与--only-binary=:all:参数结合使用。如果还要定义目标系统的 Python 版本,请使用--python-version参数。

示例场景:您使用的是 Windows,并希望numpy为使用 Python 3.9 的 Linux 系统下载。使用以下命令numpy为您的目标系统下载其所有依赖项:

pip download --platform=manylinux1_x86_64 --only-binary=:all: --python-version=3.9 numpy

要在目标系统上安装numpy,请将下载的文件复制到该系统并通过以下方式安装软件包:

pip install --no-index --find-links /path/to/package/files numpy

除了定义特定的包名称,您还可以为这两个命令使用需求文件。-r requirements.txt例如,只需将包名称替换为 即可。


[1] 查找正确的平台字符串可能很繁琐。您可以在目标系统上执行以下命令开始:
python -c "import sysconfig; print(sysconfig.get_platform().replace('-','_').replace('.','_'))"。对于 Linux,您最好在此处查找合适的平台字符串。但最终,这一切都取决于软件包的维护者是否确实为特定平台构建了它。您可以通过查看特定软件包的文件并检查 wheel 文件的后缀及其标签来查找,例如:numpy 文件。

解决方案 8:

下载tarball,将其传输到您的 FreeBSD 机器并解压,然后运行python setup.py install,您就完成了!

编辑:除此之外,您现在还可以使用 pip 安装 tarball。

解决方案 9:

使用wheel已编译的包。

捆扎:

$ tempdir=$(mktemp -d /tmp/wheelhouse-XXXXX)
$ pip wheel -r requirements.txt --wheel-dir=$tempdir
$ cwd=`pwd`
$ (cd "$tempdir"; tar -cjvf "$cwd/bundled.tar.bz2" *)

复制 tarball 并安装:

$ tempdir=$(mktemp -d /tmp/wheelhouse-XXXXX)
$ (cd $tempdir; tar -xvf /path/to/bundled.tar.bz2)
$ pip install --force-reinstall --ignore-installed --upgrade --no-index --no-deps $tempdir/*

注意wheel二进制包不能跨机器。

更多参考:https: //pip.pypa.io/en/stable/user_guide/#installation-bundles

解决方案 10:

对于 Windows,我使用了以下内容

网络连接

1.创建任意名称的目录。我使用“repo”创建

2.使用以下命令下载库(它将下载而不是安装)

pip 下载 libraray_name -d"C:\repo"

pip download openpyxl -d"C:
epo"
  1. 然后你会发现多个.whl扩展文件

  2. 复制 requirements.txt 中的所有文件名
    在此处输入图片描述

没有互联网连接

  1. 现在将此文件夹和文件移动到没有互联网连接的 PC 并运行以下命令。

pip 安装 -r requirements.txt --find-links=C:
epo --no-index

您可以阅读详细的博客链接

解决方案 11:

作为对@chaokunyang 回答的延续,我想在这里放上我编写的执行该工作的脚本:

  1. 编写一个“requirements.txt”文件,指定要打包的库。

  2. 创建一个包含所有库的 tar 文件(参见 Packer 脚本)。

  3. 将创建的 tar 文件放入目标机器并解压。

  4. 运行安装程序脚本(也打包到 tar 文件中)。

“requirements.txt”文件

docker==4.4.0

打包机端:文件名:“create-offline-python3.6-dependencies-repository.sh”

#!/usr/bin/env bash

# This script follows the steps described in this link:
# https://stackoverflow.com/a/51646354/8808983

LIBRARIES_DIR="python3.6-wheelhouse"

if [ -d ${LIBRARIES_DIR} ]; then
    rm -rf ${LIBRARIES_DIR}/*
else
    mkdir ${LIBRARIES_DIR}
fi

pip download -r requirements.txt -d ${LIBRARIES_DIR}

files_to_add=("requirements.txt" "install-python-libraries-offline.sh")

for file in "${files_to_add[@]}"; do
    echo "Adding file ${file}"
    cp "$file" ${LIBRARIES_DIR}
done

tar -cf ${LIBRARIES_DIR}.tar ${LIBRARIES_DIR}

安装程序端:文件名:“install-python-libraries-offline.sh”

#!/usr/bin/env bash

# This script follows the steps described in this link:
# https://stackoverflow.com/a/51646354/8808983

# This file should run during the installation process from inside the libraries directory, after it was untared:
# pythonX-wheelhouse.tar -> untar -> pythonX-wheelhouse
# |
# |--requirements.txt
# |--install-python-libraries-offline.sh


pip3 install -r requirements.txt --no-index --find-links .

解决方案 12:

对于 Pip 8.1.2,您可以使用pip download -r requ.txt将包下载到本地机器。

解决方案 13:

从 Pypi 下载 wheel 文件(例如 dlb-0.5.0-py3-none-any.whl)并

pip install dlb-0.5.0-py3-none-any.whl

解决方案 14:

我发现了一种更简单的方法,完全不涉及 pip。

只需将 site-packages 文件夹从在线机器复制到离线机器即可。

我在 中找到了它%USERPROFILE%AppDataLocalProgramsPythonPython312Libsite-packages。请参阅pip 在哪里安装它的包?了解位置。

然后我将site-packages文件夹压缩为 site-packages.zip,传输它,然后将所有缺失的包复制到另一台计算机的 site-packages 文件夹中。之后它就正常工作了。

最好确保两台计算机上的Python 版本相同

相关推荐
  为什么项目管理通常仍然耗时且低效?您是否还在反复更新电子表格、淹没在便利贴中并参加每周更新会议?这确实是耗费时间和精力。借助软件工具的帮助,您可以一目了然地全面了解您的项目。如今,国内外有足够多优秀的项目管理软件可以帮助您掌控每个项目。什么是项目管理软件?项目管理软件是广泛行业用于项目规划、资源分配和调度的软件。它使项...
项目管理软件   609  
  在现代项目管理中,资源的有效利用是确保项目成功的关键因素之一。随着技术的不断进步,越来越多的工具和软件被开发出来,以帮助项目经理和团队更高效地管理资源。本文将介绍10款工具,这些工具可以帮助项目团队提升资源利用效率,从而实现项目目标。禅道项目管理软件禅道项目管理软件是一款开源的项目管理工具,广泛应用于软件开发和其他行业...
项目管理系统   3  
  在项目管理领域,软件工具的不断升级和创新是推动效率和协作的关键。2024年,众多项目管理软件将迎来一系列令人期待的升级功能,这些新特性不仅将提升团队的工作效率,还将增强用户体验和数据分析能力。本文将详细介绍10款项目管理软件的最新升级功能,帮助项目经理和团队成员更好地规划和执行项目。禅道项目管理软件禅道项目管理软件一直...
开源项目管理工具   2  
  信创国产系统的10个关键厂商及其技术生态随着全球信息技术格局的不断演变,信创(信息技术应用创新)产业作为国产化替代的重要阶段,正逐步成为推动我国信息技术自主可控、安全可靠的核心力量。信创产业不仅关乎国家信息安全,也是数字经济高质量发展的关键支撑。本文将深入探讨信创国产系统中的10个关键厂商及其技术生态,分析它们在信创浪...
项目管理流程   0  
  在探讨项目管理的广阔领域中,成功并非偶然,而是精心策划、高效执行与持续优化的结果。项目管理的成功之道,可以从明确的目标设定与规划、高效的团队协作与沟通、以及灵活的风险管理与适应变化这三个核心方面进行深入解析。每个方面都是项目成功的基石,它们相互交织,共同支撑起项目的顺利推进与最终成就。明确的目标设定与规划项目管理的首要...
建筑工程项目管理规范   0  
热门文章
项目管理软件有哪些?
云禅道AD
禅道项目管理软件

云端的项目管理软件

尊享禅道项目软件收费版功能

无需维护,随时随地协同办公

内置subversion和git源码管理

每天备份,随时转为私有部署

免费试用