如何离线安装软件包?


159

从pypi下载python软件包的最佳方法是什么,以便从另一台计算机上脱机安装?有什么简单的方法可以通过pip或easy_install来做到这一点?我正在尝试在未连接到Internet的FreeBSD盒上安装请求库。


Answers:


77

如果该软件包位于PYPI上,则将其及其依赖项下载到某个本地目录。例如

$ mkdir / pypi && cd / pypi
$ ls -la
  -rw-r--r-- 1个Pavel人员237954 Apr 19 11:31 Flask-WTF-0.6.tar.gz
  -rw-r--r-- 1个Pavel员工389741 2月22日17:10 Jinja2-2.6.tar.gz
  -rw-r--r-- 1个Pavel人员70305 Apr 11 00:28 MySQL-python-1.2.3.tar.gz
  -rw-r--r-- 1个Pavel人员2597214 Apr 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 Apr 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 ...

如果您构建了应用程序的计算机与要在其上部署应用程序的计算机具有相同的体系结构,则可以将所有easy_install内容都放入其中的整个虚拟环境目录中。不过,在压缩之前,您必须使虚拟环境目录可重定位(请参见 --relocatable选项)。注意:目标计算机需要安装相同版本的Python,并且应用程序可能也已经预安装了基于C的任何依赖关系(例如,如果您依赖PIL,那么必须预安装libpng,libjpeg等) 。


3
取而代之的是--allow-hosts=None您可以使用开关--no-index
谣言

您能否详细说明如何创建格式正确的Python应用程序?
psr


299

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


问题在于,依赖项可能还有其他依赖项,这些依赖项将不会下载。
vikki

Snake basket(基于pip构建)也将下载依赖项的依赖项。
vikki 2013年

14
@vikki不是,“ pip install --download”也会下载依赖项,因此即使您的要求具有其他依赖项,上述命令也可以正常工作。蛇篮可能会做其他有用的事情(从没使用过),但是由于这个原因,绝对不需要。
卡尔·迈耶

6
@vikki我理解您在说什么,但是我告诉您这不是真的:-)在再次发布相同的断言之前,您应该实际尝试一下。我只是将“ pytest”放到了requirements.txt文件中,然后运行了“ pip install --download。-r requirements.txt”,它为pytest及其setup.py依赖项“ py”下载了sdists。
卡尔·梅耶

3
我认为应该是这样:--find-links file:/path/to/some/dir/您应该下载并安装相同版本的
pip-

56

如果要脱机安装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)存档驾驶室成wheelhouse.tar.gztar -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以安装库及其依赖项


6
对于初学者来说,这是最清楚的答案,并提供适当的步骤。谢谢
kumarharsh

这是到目前为止我所见过的最pythonic的方式。谢谢!
peluzza

2
但是按照您的指示,pip install最后我说:错误:找不到满足要求的版本..
DennisLi,

@DennisLi您的python和pip版本是什么?
chaokunyang

我想通了,这是因为pip在我的requirements.txt中找不到特定版本的pandas软件包,因为我使用pip3来安装pandas 0.2
DennisLi

13

离线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)使用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,tranferred_pa​​ckages {Flask-0.10.1.tar.gz,...}]

检查包裹清单

pip list

注意:与2017年一样,最好使用python3。您可以使用此命令创建python 3 virtualenv。

virtualenv -p python3 envname

2
这里似乎缺少或“模糊不清”的步骤,我希望看到“停用”然后“点冻结” ... cd脱机,。/ tranferred_pa​​ckages无处出现-显然这需要清理吗?
汉奴

也许,但是您应该考虑“我想要简短的帖子”,“该过程很复杂,我无法写出每个步骤(只有在YouTube上才可以)”。
cyera

这是恕我直言的最佳答案。帮助很大
webofmars

如果它完全说明了如何设置tranferred_pa​​ckages文件夹,那么这将是最佳答案。没有关键步骤,-1
Zim

8

下载压缩包,将其转移到您的FreeBSD机器上并解压缩,然后运行python setup.py install就可以了!

编辑:只是要补充一点,您现在也可以使用pip安装tarball。


1
那么所有的依赖关系呢?解决这些问题的最佳方法是什么?我还需要手动安装依赖项吗?
克里斯·德兰兹

是的,那是我所知的唯一途径。
dav1d 2012年

8

让我一步一步地完成该过程:

  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必须将替换为所需软件包的原始名称。


6

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


1
我在使用Python 3.6捆绑到计算机上并在Python 3.5捆绑在另一个计算机上时遇到问题:“ <package> .whl在该平台上不受支持 ”。可能需要源版本和目标版本才能与某些软件包匹配。
Juuso Ohtonen

5

我有一个类似的问题。而且我必须以相同的方式安装它,我们是从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. 压缩软件包目录,然后将其复制到没有Internet访问权限的计算机上。然后做,

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

    packages.tar.gz复制到没有Internet访问权限的目标计算机中。

  4. 在无法访问互联网的计算机上,执行以下操作(假设您将已解压缩的软件包复制到当前计算机上的/ 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

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.