Python包离线安装

时间:2012-06-18 21:51:46

标签: python pip freebsd easy-install python-requests

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

11 个答案:

答案 0 :(得分:222)

pip download命令允许您在不安装包的情况下下载包:

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安装下载的sdists,而无需访问网络。

答案 1 :(得分:58)

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

$ 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

有些软件包可能需要手工归档到类似的tar包中。当我想要更新的(不太稳定)版本的东西时,我会做很多事情。有些包不在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目录中不存在一个或多个依赖项,则构建将失败。它不会试图从互联网上混杂地安装丢失的东西。

我强烈建议您在活跃的virtual environment内调用setup.py develop ...easy_install ...,以避免污染您的全局Python环境。这是(virtualenv)几乎要走的路。永远不要在全局Python环境中安装任何东西。

如果您构建应用程序的计算机与要部署它的计算机具有相同的体系结构,则可以简单地将整个虚拟环境目录压缩到easy_install - 所有内容。在压缩之前,您必须使虚拟环境目录可重定位(请参阅--relocatable选项)。 注意:目标计算机需要安装相同版本的Python,并且还必须预先安装您的应用程序可能具有的任何基于C的依赖项(例如,如果您依赖于PIL ,然后必须预先安装libpng,libjpeg等)。

答案 2 :(得分:11)

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

1)安装virtualenv 在线与pip:

pip install virtualenv --user

或使用whl离线:转到此link,下载最新版本(.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

打开一个新终端并创建另一个类似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

答案 3 :(得分:6)

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

编辑:只是为了补充一下,你现在也可以用pip安装tarball。

答案 4 :(得分:6)

如果要脱机安装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

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

3)将requirements.txt复制到wheelhouse目录

4)用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以安装库及其依赖项

答案 5 :(得分:5)

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

答案 6 :(得分:3)

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

答案 7 :(得分:2)

让我逐步完成该过程:

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

    假设您想要的软件包是 tensorflow

    $ pip download tensorflow

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

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

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

答案 8 :(得分:1)

我有类似的问题。而且我必须以相同的方式安装它,就像从pypi一样。

我做了以下事情:

  1. 创建目录以将所有具有Internet访问权限的软件包存储在计算机中。

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

    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
    
  3. Tar软件包目录,然后将其复制到没有Internet访问权限的计算机上。然后,

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

    packages.tar.gz 复制到无法访问Internet的目标计算机中。

  4. 在无法访问Internet的计算机上,执行以下操作(假设已将已打包的软件包复制到当前计算机上的 / 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
    
  5. 最后,我建议您使用某种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

答案 9 :(得分:0)

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

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

答案 10 :(得分:0)

作为对@chaokunyang答案的继续,我想将我编写的可用于工作的脚本放在这里:

  1. 写一个“ requirements.txt”文件,该文件指定要打包的库。
  2. 创建一个包含所有库的tar文件(请参阅Packer脚本)。
  3. 将创建的tar文件放入目标计算机并解压缩。
  4. 运行Installer脚本(该文件也打包在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 .