24

上一次我不得不担心安装 Python 包是两年前使用EnthoughtNumPyMayaVi2。那次经历让我一直在做与在非标准位置($HOME/usr/local2.6/例如,在 .

无论如何,我的工作是让我重新安装各种 Python 包。CheeseShop教程除了 Buildout 之外还提到了 DistUtils 和 EasyInstall!我很难找到一个比较这些(和其他)PyPi 安装工具的地方,所以我希望能够进入 StackOverflow 社区: 每个安装工具的优缺点是什么?

4

5 回答 5

10

首先,无论您决定使用哪种安装工具,开始使用virtualenv --no-site-packages!这样,python 包就不会全局安装,您可以轻松地回到旧项目和新项目中的位置。

现在,您的比较有点像苹果对梨,因为您列出的工具并不相互排斥。但是,我可以完全推荐 Buildout。它将安装 python 包以及其他东西,并让您自动安装和部署(复杂)项目。

此外,我建议将Fabric作为自动化管理任务的一种手段。

于 2009-12-29T23:24:15.453 回答
9

Distributesetuptools( easy_install) 的一个新分支,也应该考虑。甚至Guido 也推荐它

Buildout 与包装正交——您可以将 buildout 与 Distribute 一起使用

于 2009-12-29T23:16:36.930 回答
9

在决定为我的所有项目使用 buildout 之前,我已经对这个主题进行了一些安静的研究(值得几周)。

除了 Buildout 之外,还有 DistUtils 和 EasyInstall!

创建一个地方来比较所有这些工具的困难在于,它们都是同一工具链的一部分,并且一起用于创建可预测、可靠和灵活的工具集。

例如,easy_install 用于将 distutils 包从 pypi(cheeseshop) 安装到系统 Python 的 site-packages 目录。这大大简化了将软件包安装到系统/全局 sys.path 的过程。

easy_install 对于所有项目都一致的包非常方便。但是,我发现我更喜欢使用系统的 easy_install 来安装项目不依赖的包。例如,我在每个项目中都使用github-cli,因为它允许我从命令行与项目的 Github 问题进行交互。我在项目中使用它,但这是为了方便,项目本身不依赖于这个包。

为了管理项目的依赖关系,我使用buildout。Buildout 允许您明确指出您的项目所依赖的包的版本。我更喜欢 buildout 而不是 pip-requirements.txt 因为 buildout 是声明性的。使用 pip,您可以安装软件包,并在开发结束时生成 requirements.txt 文件。另一方面,使用 Buildout,您可以在将包 egg 添加到项目之前修改 buildout.cfg。这迫使我意识到我要添加到项目中的包。

现在,有一个virtualenv的问题。virtualenv 最广为人知的特性之一显然是--no-site-packages选项。我还没有发现该选项特别有用,因为我使用的是 buildout。Buildout 管理 sys.path 并且只包含我要求它包含的包。它还包括系统 Python 的站点包中的所有内容,但由于我没有在项目中使用的任何内容,因此我从来没有冲突。

另外,我发现 --no-site-packages 只会阻碍我的开发过程,因为我使用系统的打包系统安装了一些包。通常,任何具有需要编译的 C 库的东西,我都会通过系统的打包系统进行安装。

在项目的fabfile.py 中,我包含了测试函数来测试我通过系统的包管理器安装的系统包的存在。

总之,这是我使用这些工具的方式:

System's Package Manager(apt-get, yam, port, fink ...) 我使用其中之一在这个系统上安装我需要的 python 版本。我还使用它来安装包含 c 库的lxml等软件包。

easy_install 我用来安装我在所有项目中使用的 pypi 包,但项目不依赖于这些包。

buildout 我用来管理项目的依赖关系。

根据我的经验,这个工作流程非常灵活、便携且易于使用。

于 2009-12-31T20:26:34.700 回答
3

每当我需要提醒自己比赛的状态时,我都会以这些为起点:

于 2011-02-09T06:15:38.383 回答
0

I can't easily help you with finding the strength, but I can make it a bit harder, since it also depends on the platform you want to use.

For example if you need to install python packages on Gentoo (GNU/Liunx) based computers, you can easily use g-pypi to create ebuilds for all packages which use distutils (rather: a setup.py). That way they get completely integrated into your system and can be added, updated and removed like all your other tools. But it naturally only works for Gentoo-based systems.

Also you can use yolk to find out about all packages installed via easy_install on your system (not only on Gentoo).

When I write code, I simply use distutils (because it allows building portage ebuilds very easily) and sometimes basic setuptools features, or organize my programs so people can just download and run them from the program folder (ideally just unpack the source archive / clone the repository somewhere). This isn't the perfect solution, but until the core python team decides which way they want to move, I don't want to fix onto a path (anymore) which might disappear.

于 2009-12-30T08:01:26.790 回答