有没有办法配置 easy_install 以避免在安装失败时再次下载文件?
2 回答
13 年后更新:easy_install
2021 年 1 月从 Python 中移除。python 包管理器是pip
,它缓存下载的包。
pip ( http://pypi.python.org/pypi/pip/ ) 是 easy_install 工具的替代品,可以做到这一点。
只需运行easy_install pip
并将环境变量设置PIP_DOWNLOAD_CACHE
为您希望 pip 存储文件的路径。请注意,缓存不适用于从源代码存储库(如 svn/git/hg/bzr)签出的依赖项。
然后使用pip install
代替easy_install
这是我使用 pip 的解决方案,甚至可以管理二进制包的安装,并且可以在 Linux 和 Windows 上使用。并且根据要求,它将从 PyPi 的下载限制到最低限度,作为额外的奖励,在 Linux 上,它允许将通常需要编译的软件包的重复安装速度提高到几分之一秒。
设置只需几个步骤,但我认为,这是值得的。
创建 pip 配置文件
创建 pip 配置文件(在 linux 上:~/.pip/pip.conf,在 Windows %HOME%\pip\pip.ini 上)
我的有这个内容:
[global]
download-cache = /home/javl/.pip/cache
find-links = /home/javl/.pip/packages
[install]
use-wheel = yes
[wheel]
wheel-dir = /home/javl/.pip/packages
填充cache
目录 - 自动进行
该cache
目录每次都会获取从pypi下载的数据的缓存版本,pip尝试从pypi获取一些包。很容易得到它(不需要特别注意),但请注意,从 pip 的角度来看,这些只是从 PyPi 下载的兑现数据,而不是包,所以如果你使用 option --no-index
,它将不起作用。
pip download
填充packages
目录
packages
目录是放置真正的包文件的地方。例如,对于我最喜欢的包plac
,我会这样做:
$ pip download --dest ~/.pip/packages plac
并且 plac 包文件将出现在该目录中。您甚至可以使用-r requirements.txt
文件一次为多个包执行此操作。
这些包甚至与$ pip install --no-index <something>
.
防止在 Linux 上重复编译同一个包
例如lxml
,包需要编译,下载和编译可能需要 45 秒到几分钟。使用车轮格式,您可以在这里节省很多。
安装wheel
工具,如果您还没有:
$ pip install wheel
创建轮子lxml
(假设您lxml
过去已成功安装 - 它需要安装系统中的一些库):
$ pip wheel lxml
这会下载、编译,但最终会导致 lxmlwhl
文件位于packages
目录中。
自那时候起
$ pip install lxml
甚至更快
$ pip install --no-index lxml
将花费几分之一秒,因为它使用轮格式包。
从Window setup exe包中准备wheel包
(注:Linux 机器上也可以准备,不需要编译,只是从 exe 文件重新打包成whl
.)
从 pypi 下载包的 exe 形式,例如:
$ wget https://pypi.python.org/packages/2.7/l/lxml/lxml-3.2.3.win32-py2.7.exe#md5=14ab978b7f0a3382719b65a1ca938d33 $ dir lxml-3.2.3.win32-py2.7 。可执行程序
将其转换为
whl
$ 轮子转换 lxml-3.2.3.win32-py2.7.exe $ dir lxml-3.2.3.win32-py2.7.exe lxml-3.2.3-cp27-none-win32.whl
测试它:
$点安装lxml
或者
$ pip install --no-index lxml
应该很快。
请注意,这wheel convert
可以对鸡蛋格式的包进行完全相同的转换。
让easy_install
并重setup.py install
用您的packages
目录
easy_install
并且$ python setup.py install
似乎不提供下载缓存,但允许使用我们packages
目录中的包。
为此,请编辑这两个工具的配置文件:
在 Linux 上:$HOME/.pydistutils.cfg
在 Windows 上:%HOME%\pydistutils.cfg
就我而言,我在这里/home/javl/.pydistutils.cfg
:
[easy_install]
find_links = /home/javl/.pip/packages
pip install
当 pip 尝试安装一个包并声明对其他包的依赖时,这个配置甚至可能有助于某些调用情况。当它委派这个任务来setup.py
调用时,如果没有.pydistutils.cfg
配置,它会从 PyPi 下载文件。
不幸的是,在这种情况下不支持车轮格式(据我所知)。