6

我们的所有系统都有一个通用的 python 安装,以确保每个系统都有相同的 python 安装并缓解配置问题。此安装位于共享驱动器上。我们还有多个共享此安装的平台。我们通过在编译 python 时设置 --exec-prefix 配置选项来解决冲突的特定于平台的文件。

我的问题是我现在想使用与平台相关的easy_install(或其他方式)安装一个鸡蛋。easy_install 将 egg 放在安装的平台无关部分的 site-packages 目录中。鸡蛋的名字里面有平台,所以应该没有冲突。但是 python 只会加载它找到的第一个。(因此,在 Solaris 上,它可能会尝试加载 Linux egg)。修改 easy-install.pth 文件可以改变它找到的那个,但这没什么用。

我可以将 .egg 文件移动到依赖于平台的包目录中,然后使用 pkg_resources.require() 加载它们(或手动调整路径)。但似乎我不应该这样做,因为平台是以鸡蛋的名义。

有没有更通用的方法可以确保 python 为正确的平台加载鸡蛋?

4

4 回答 4

2

试试 virtualenv ... http://pypi.python.org/pypi/virtualenv ... 帮助您使用它自己的 python 解释器 + site_packages 文件夹创建隔离环境。因此,您永远不会与安装在本地路径中的软件包发生任何冲突。

于 2009-12-15T18:15:19.283 回答
2

我最终要做的是将平台相关的 egg 手动移动到特定于平台的站点包目录(如http://docs.python.org/install/index.html中指定的)。然后我在同一个目录中创建了另一个easy-install.pth,列出了要安装的鸡蛋。

如果 easy_install 遵守 exec_prefix 并将平台相关的鸡蛋放在正确的“非纯模块分发”位置,这将更加方便。也许我会向easy_install 人员提出这个要求。

于 2009-12-17T18:39:18.377 回答
1

Python 有足够的钩子使这成为可能,但这可能并不明智。如果你真的想实现这一点,请查看PEP 302并开始破解easy_installdistribute源代码。如您所知,在easy-install.pth.

简单地跟踪要安装的 Python 包可能会好得多。例如,您可以编写自己的 Python 包,该包仅取决于所需的集合。

于 2009-12-15T15:47:30.423 回答
0

使用“easy_install -m”安装所有特定于平台的软件包,这样 sys.path 上就没有默认版本。这样,版本解析发生在运行时,平台信息将被考虑在内。

于 2010-01-29T18:17:49.427 回答