有没有一种方法可以配置easy_install,避免在安装失败时需要重新下载文件?
有没有一种方法可以配置easy_install,避免在安装失败时需要重新下载文件?
easy_install
。Python包管理器是pip
,它会缓存已下载的软件包。
pip
(http://pypi.python.org/pypi/pip/)是easy_install
工具的即插即用替代品,并可以实现相同功能。
只需运行easy_install pip
并设置环境变量PIP_DOWNLOAD_CACHE
到你想要存储文件的路径。
请注意,缓存无法处理从源代码库(如svn/git/hg/bzr)检出的依赖项。
然后使用pip install
代替easy_install
这是使用pip的解决方案,可管理二进制软件包的安装并可在Linux和Windows上使用。根据要求,它将下载自PyPi的数据限制到最小,并且作为额外奖励,在Linux上,它允许将通常需要编译的程序包重复安装速度缩短到几分之一秒。
设置需要几个步骤,但我认为值得这样做。
创建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下载的缓存数据,而不是包,因此如果您使用了--no-index
选项,则无法正常工作。
pip download
用于填充packages
目录packages
目录是放置真实包文件的地方。例如,对于我最喜欢的包plac
,我会执行以下操作:
$ pip download --dest ~/.pip/packages plac
然后 plac 包文件将出现在该目录中。您甚至可以使用 -r requirements.txt
文件一次性为多个包执行此操作。
即使使用了 $ pip install --no-index <something>
,这些软件包仍然会被使用。
例如,lxml
软件包需要编译,下载和编译可能需要 45 秒到几分钟不等的时间。 使用 wheel 格式,可以节省大量空间。
如果尚未安装,请安装 wheel
工具:
$ pip install wheel
为 lxml
创建轮子(假设您以前已经成功安装了 lxml
- 它需要在系统中安装一些库):
$ pip wheel lxml
这里涵盖了下载、编译的过程,最终结果是在packages
目录下生成了lxml的whl
文件。
从那以后
$ pip install lxml
甚至更快
$ pip install --no-index lxml
使用 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.exe
将其转换为 whl
包:
$ wheel convert 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
测试它:
$ pip install lxml
或者
$ pip install --no-index lxml
将非常迅速。
请注意,wheel convert
可以完全对Egg格式的软件包进行相同的转换。
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尝试安装一个声称依赖于其他软件包的软件包时,这个配置也可能有所帮助。因为它将此任务委托给setup.py调用,没有.pydistutils.cfg配置文件,pip会从PyPI下载该文件。
不幸的是,在这种情况下不支持wheel格式(据我所知)。
pip无法安装二进制文件(_.egg文件_)
。这在Windows平台上非常重要。 - Nanda Kishore