19

关于这个问题的不同方面的许多帖子,但我还没有看到一篇将所有内容整合在一起的帖子。

首先是一个主观的陈述:当我们离开解释器并开始处理部署问题时,我们在使用 Python 语言时所体验到的简单性似乎被粉碎了。如何最好地在同一台机器上拥有多个版本的 Python?软件包应该安装在哪里?Disutils vs. setuptools vs. pip 等。在部署方面,Python 的 Zen 似乎被严重滥用了。我感觉到 Windows 上的“DLL 地狱”体验令人毛骨悚然。

专家们是否就这些问题达成了某种程度的最佳实践?

您是否在同一台机器上运行多个版本的 Python?您如何保持对它们可以共存的信心——并且新版本不会破坏其他依赖于早期版本(例如操作系统供应商提供的脚本)的进程的假设?这安全吗?virtualenv 够用吗?

本地文件系统上 Python 环境的不同组件(包括 3rd 方包)的位置的最佳选择是什么?许多不同版本的 Unixy 和 Windows 操作系统的位置之间是否存在严格或粗略的对应关系?

还有沼泽中最阴暗的角落——你使用什么安装工具(setuptools、distutils、pip 等),它们是否能很好地满足你的选择:文件位置、Python 虚拟环境、Python 路径等。

这些听起来像是很难的问题。我希望经验丰富的 Pythonistas 可能已经为这些挑战定义了一种(或两种)规范方法。任何“挂在一起”作为一个可以放心使用的系统的方法(感觉不像是单独的、不相关的工具)都会非常有帮助。

4

3 回答 3

8

我发现virtualenv是在同一台机器上配置和维护多个环境的唯一可靠方法。它甚至可以作为打包环境并将其安装在另一台机器上的一种方式。

对于包管理,我总是使用pip,因为它与virtualenv配合得非常好。它还可以轻松地从各种来源(例如 git 存储库)安装和升级包。

于 2011-08-31T20:11:04.463 回答
3

我同意这是一个相当广泛的问题,但无论如何我都会尝试解决它的许多部分。

关于您的主观陈述:我不明白为什么 Python 的简单和优雅会暗示打包和部署问题突然应该变得简单。与包装有关的一些事情很简单,有些则不然,有些可能。如果我们有一个完整、强大且简单的包装系统,对用户来说是最好的,但它并没有变成那样。distutils 被创建,然后它的开发暂停,setuptools 被创建并添加了新的解决方案和新问题,由于社会问题,distribute 是从 setuptools 分叉的,最后创建了 distutils2 来制作一个官方完整的库。(更多关于distribute、distutils、setuptools 和distutils2 之间的区别?)对于开发人员和用户来说,情况远非理想,但我们正在努力使其变得更好。

如何最好地在同一台机器上拥有多个版本的 Python?如果您使用的是现代操作系统,请使用包管理器;如果您在 UNIX 上从源代码编译,请使用“make altinstall”;如果您在 Windows 上从源代码编译,请使用类似的非冲突安装方案。作为 Debian 用户,我知道我可以使用“pythonX.Y”来调用各个版本,而默认版本(“python”和“python3”)是由 Debian 开发人员决定的。一些操作系统已经开始打破 python == python2 的假设,所以有一个 PEP 正在进行中来祝福或谴责这一点:http: //www.python.org/dev/peps/pep-0394/ Windows 似乎缺乏一种默认使用一个 Python 版本的方法,因此还有另一个 PEP: http: //www.python.org/dev/peps/pep-0397/

软件包应该安装在哪里?使用 distutils,我可以将项目安装到我的用户站点包目录中(参见 PEP 370 或 docs.python.org)。问题到底是什么?

不支持并行安装同一项目的不同版本。它需要一个 PEP 来讨论对导入系统和打包工具的更改。在有人开始讨论之前,使用 virtualenv 或 buildout 就足够了。

我不明白关于“Python 环境的组件”位置的问题。

我主要使用系统包(即使用 Debian 上的 Aptitude 包管理器)。为了尝试项目,我克隆了他们的存储库。如果我需要 Aptitude 没有的东西,我会在我的用户站点包目录中安装(或将 .pth 文件放入存储库)。我不需要自定义 PYTHONPATH,但我已经使用 PYTHONUSERBASE 更改了我的用户站点包的位置。我不喜欢 setuptools/distribute 中的魔法和鸡蛋概念,所以我不使用它们。不过,我已经开始在一个项目中使用 virtualenv 和 pip(他们在后台使用 setuptools,但我进行了私有安装,因此我的全局 Python 没有 setuptools)。

于 2011-09-26T17:24:37.080 回答
0

该领域的一个资源是 Tarek Ziade 所著的 Expert Python Programming 一书。我对这本书的质量持矛盾态度,但所涵盖的主题正是你所关注的。

于 2011-08-29T15:17:46.597 回答