如何离线安装包?

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

443706 次浏览

下载压缩文件,将它转移到你的FreeBSD机器并提取它,然后运行python setup.py install,你就完成了!

编辑:在此基础上,您现在还可以使用pip安装焦油球。

如果包在PYPI上,将其及其依赖项下载到某个本地目录。 例如< / p >
$ mkdir /pypi && cd /pypi
$ ls -la
-rw-r--r--   1 pavel  staff   237954 Apr 19 11:31 Flask-WTF-0.6.tar.gz
-rw-r--r--   1 pavel  staff   389741 Feb 22 17:10 Jinja2-2.6.tar.gz
-rw-r--r--   1 pavel  staff    70305 Apr 11 00:28 MySQL-python-1.2.3.tar.gz
-rw-r--r--   1 pavel  staff  2597214 Apr 10 18:26 SQLAlchemy-0.7.6.tar.gz
-rw-r--r--   1 pavel  staff  1108056 Feb 22 17:10 Werkzeug-0.8.2.tar.gz
-rw-r--r--   1 pavel  staff   488207 Apr 10 18:26 boto-2.3.0.tar.gz
-rw-r--r--   1 pavel  staff   490192 Apr 16 12:00 flask-0.9-dev-2a6c80a.tar.gz

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

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

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

如果你想在运行你的应用程序的同时还能运行所有必要的依赖项,你可以这样做:

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

这样,你的应用程序将直接从你的源目录执行。你可以侵入一些东西,然后重新运行应用程序而不需要重建任何东西。

如果你想将你的应用程序及其依赖项安装到当前的python环境中,你会这样做:

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

在这两种情况下,如果/pypi目录中没有一个或多个依赖项,构建将失败。它不会试图从互联网上乱安装丢失的东西。

我强烈建议在活动的虚拟环境中调用setup.py develop ...easy_install ...,以避免污染您的全局Python环境。这是(virtualenv)应该走的路。不要在全局Python环境中安装任何东西。

如果构建应用程序的机器与要部署应用程序的机器具有相同的架构,则可以简单地将整个虚拟环境目录压缩到easy_install-ed所有内容所在的目录中。不过在tarball之前,你必须使虚拟环境目录可重定位(参见——浮动选项)。注意:目标机器需要安装相同版本的Python,并且任何基于c的依赖程序也必须预先安装在那里(例如,如果你依赖公益诉讼,那么libpng, libjpeg等必须预先安装)。

在可以访问internet的系统上

pip download命令允许你下载包而不安装它们:

pip download -r requirements.txt

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

在无法访问internet的系统上

然后你可以使用

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

在不访问网络的情况下安装那些下载的模块。

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

离线python。为此,我使用virtualenv(孤立的Python环境)

1)安装virtualenv Online with pip:

pip install virtualenv --user

或者离线使用whl:到这个链接,下载上一个版本(。WHL或tar.gz),并使用以下命令安装:

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

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

2)使用virtualenv

在联机机器上选择终端为cd的目录并运行以下代码:

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

安装完所有的包后,你必须生成一个requirements.txt,所以当你的virtualenv是活动的,写

pip freeze > requirements.txt

打开一个新终端并创建另一个env,如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, transferred_packages {Flask-0.10.1.tar.gz,…}]

检查你的包裹清单

pip list

注意:因为我们是在2017年,所以最好使用python 3。使用该命令可以创建python 3 virtualenv。

virtualenv -p python3 envname

使用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

如果您想离线安装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并删除不需要的。

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

3)拷贝requirements.txt到wheelhouse目录

4)用tar -zcf wheelhouse.tar.gz wheelhouse将驾驶室存档到wheelhouse.tar.gz

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

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

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

我也遇到过类似的问题。我必须让它以同样的方式安装,我们从pypi。

我做了以下事情:

  1. 创建一个目录来存储机器中所有可以访问internet的包。

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

编辑:你也可以试试:

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. Tar packages目录并将其复制到没有互联网访问的机器上。那么做的,

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

packages.tar.gz复制到没有internet访问的目标机器中。

  1. 在没有互联网接入的机器中,执行以下操作(假设您将tar包复制到当前机器中的/ /包/ /路径)

    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>
    

你应该能够下载目录/ /包/ /路径下的所有模块。

注意:我只是这样做,因为我不能添加选项或改变我们安装模块的方式。否则我早就这么做了

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

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

  1. 在连接到互联网的计算机上创建一个文件夹。
   $ mkdir packages
$ cd packages
  1. 打开命令提示符或shell,执行以下命令:

    假设您想要的包裹是 tensorflow

    $ pip download tensorflow < / p >

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

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

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

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

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

作为一个继续@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 .

对于Windows,我使用了下面的东西

网络连接

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

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

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

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

  2. copy requirements.txt中的所有文件名 enter image description here < / p >

没有互联网连接

  1. 现在将此文件夹和文件移动到没有互联网连接的PC并运行以下命令。
pip install -r requirements.txt --find-links=C:\repo --no-index