一尘不染

Python-如何离线安装软件包?

python

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


阅读 1063

收藏
2020-02-13

共2个答案

一尘不染

如果该软件包位于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等)

2020-02-13
一尘不染

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,而无需访问网络。

2020-02-13