跳转到主要内容

Python包安装器

项目描述

注意: pyinstall已被重命名为 pip:请参阅 http://pip.openplans.orghttp://pypi.python.org/pypi/pip

简介

pyinstall是easy_install的替代品。它主要使用相同的技巧来查找包,因此原本为easy_install制作的包也应能被pyinstall使用。

pyinstall旨在改进easy_install。一些改进包括:

  • 所有包在安装前都会被下载。因此不会发生部分完成的安装。

  • 在控制台呈现有用的输出。

  • 跟踪操作的动机。例如,如果正在安装包,pyinstall会跟踪为什么需要这个包。

  • 错误消息应该是有用的。

  • 代码相对简洁且连贯,使其更容易编程使用。

  • 包不需要以egg存档的形式安装,它们可以平铺安装(同时保留egg元数据)。

  • 可能会添加一些功能,如对其他版本控制系统的原生支持或卸载功能。 (它们可能会添加到easy_install中,但我认为pyinstall的几率更高。)

此外,pyinstall 最终将与 poacheggs 直接合并,使定义固定需求集和可靠地重建一组包变得简单。

pyinstall 与 virtualenv 兼容,建议您使用 virtualenv 来隔离您的安装。

社区

pyinstall 的主页暂时位于 PyPI 上 – 将来会有更合适的主页。错误报告可以提交到 poacheggs Trac 实例(可能也会更改)。讨论应在 virtualenv 电子邮件组 上进行。

与easy_install的区别

pyinstall 无法安装某些包。具体来说:

  • 它不能从 eggs 中安装。它只从源代码安装。(也许将来会更改,但优先级较低。)

  • 它不理解 Setuptools 扩展(如 package[test])。这最终应该添加。

  • 它与某些在其 setup.py 文件中自定义 distutils 或 setuptools 的包不兼容。

  • 也许它在 Windows 上不起作用。至少,作者很少在 Windows 上进行测试。

  • 它还有一些额外的功能。作者认为这些额外功能很棒。

需求文件

在安装软件时,尤其是 Python 包时,通常会安装很多库。您刚刚执行了 easy_install MyPackage 并得到了一打包。每个包都有自己的版本。

也许您运行了那个安装并成功了。太好了!它会继续工作吗?您是否需要提供特殊选项才能使其找到所有内容?您是否需要安装一大堆其他可选组件?最重要的是,您是否能够再次做到这一点?

如果您曾经尝试在新的系统上设置应用程序或使用稍微更新的一些组件,并且失败了,那么 pyinstall 需求就是为您准备的。如果您还没有遇到这个问题,那么您最终会遇到的,所以 pyinstall 需求也是为您准备的——需求使包的显式、可重复安装成为可能。

那么需求文件是什么?它们非常简单:要安装的包列表。您不必运行类似 pyinstall MyApp 的命令并得到任何随带的库,您可以创建一个类似以下的需求文件

MyApp
Framework==0.9.4
Library>=0.2

然后,无论 MyApp 在 setup.py 中列出了什么,您都将得到特定版本的 Framework 和至少 Library 的 0.2 版本。(您可能认为您可以在 setup.py 中列出这些特定版本——尝试一下,您会很快看到为什么这样做不起作用。)您可以添加 MyApp 严格不需要的可选库和支持工具。

您还可以包括“可编辑”的包——从 subversion(未来将支持其他 VCS)签出的包。这些包就像使用 pyinstall 的 -e 选项一样。它们看起来像

-e svn+http://myrepo/svn/MyApp#egg=MyApp

您必须以 svn+ 开始 URL(最终您将能够使用 hg+ 等),并且您必须包括 #egg=Package 以使 pyinstall 知道在 URL 中期望什么。您还可以在 URL 中包含 @rev,例如,@275 以签出修订版本 275。

冻结需求

所以您有一组工作包,并且您想能够在其他地方安装它们。《需求文件》使您能够安装确切版本,但它不会告诉您所有确切版本是什么。

要从已知的工作环境创建新的需求文件,请使用

$ pyinstall.py --freeze=stable-req.txt

这会将 所有 安装的库的列表写入 stable-req.txt,每个库都有确切版本。您可能需要在生成后编辑该文件(例如,删除不必要的库),但它会为您构建需求文件提供一个稳定的起点。

您还可以提供一个现有的需求文件,它会将这个文件作为新文件的模板。所以如果您这样做

$ pyinstall.py --freeze=stable-req.txt -r devel-req.txt

它将按顺序保留devel-req.txt中列出的包,并保留注释。

捆绑包

另一种分发一组库的方式是捆绑格式(特定于pyinstall)。这种格式目前还不稳定(还没有收到任何反馈,也没有太多的思考)。捆绑文件包含您包的所有源代码,您可以让pyinstall一次性安装它们。一旦您有了捆绑文件,就不再需要网络访问。要构建捆绑文件,请执行以下操作:

$ pyinstall.py --bundle=MyApp.pybundle MyApp

(使用需求文件会更加明智。)然后其他人可以获取MyApp.pybundle文件并运行

$ pyinstall.py MyApp.pybundle

这不是二进制格式。这只是一个源代码打包。如果您有二进制包,那么安装文件的人必须有一个编译器,安装必要的头文件等。二进制包很难,这是相对容易的。

使用pyinstall与virtualenv

当与virtualenv一起使用时,pyinstall最有营养。pyinstall不安装“多版本”egg的一个原因就是virtualenv消除了许多这种需要。

您不需要安装pyinstall就可以使用它,您可以运行python pyinstall.py并它将正常工作。这是为了避免安装的引导问题。您也可以在任何virtualenv环境中运行pyinstall,例如

$ virtualenv new-env/
... creates new-env/ ...
$ pyinstall.py -E new-env/ MyPackage

这完全等同于

$ ./new-env/bin/python pyinstall.py MyPackage

但是,如果您已经安装了virtualenv并且路径new-env/不存在,那么将创建一个新的virtualenv。

项目详情


下载文件

下载适用于您平台的文件。如果您不确定选择哪个,请了解有关安装包的更多信息。

源代码分发

pyinstall-0.1.4.tar.gz (37.9 kB 查看哈希值)

上传时间 源代码

支持者