小编典典

如何离线安装包?

all

从 pypi 下载 python 包及其依赖项以在另一台机器上离线安装的最佳方法是什么?使用 pip 或 easy_install
有什么简单的方法吗?我正在尝试在未连接到 Internet 的 FreeBSD 机器上安装请求库。


阅读 69

收藏
2022-05-22

共1个答案

小编典典

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

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

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

假设您有一个格式正确的 Python
应用程序~/src/myapp~/src/myapp/setup.pyinstall_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。它不会试图乱七八糟地安装 Internet 上丢失的东西。

我强烈建议在一个活跃的虚拟环境中调用setup.py develop ...和避免污染你的全局 Python 环境。这是(virtualenv 就是)几乎要走的路。永远不要在全局 Python
环境中安装任何东西。easy_install ...

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

2022-05-22