定义运行时环境

时间:2009-09-15 19:08:22

标签: language-agnostic deployment runtime

我需要为我的开发定义一个运行时环境。第一个想法当然不是重新发明轮子。我下载了macports,用过easy_install,试过fink。我总是有问题。现在,例如,我无法编译scipy,因为MacPorts安装程序想要下载并安装gcc43,但这不能在Snow Leopard上编译。这个问题是一个错误,但我基本上与它们绑在一起,因为我的运行时可用。

我前段时间学到的一种技术是编写一个makefile来下载并使用明确指定的库和实用程序版本构建运行时/库。这早于MacPorts / fink / apt方法,但你对它有更多的控制,尽管你必须手工完成所有事情。当然,如果运行时间增长,这可能会成为一个噩梦,但如果您发现问题,可以使用patch并在下载的软件包上修复问题,然后构建它。

我有多个问题:

  • 为开发准备一个定义良好的运行时/库集合的技术是什么?
  • MacPorts / fink /是否允许我在出现问题时具有相同的重新修改灵活性?
  • 考虑到我的makefile解决方案,当我的软件最终下载时,您有什么建议解决我的开发环境与用户机器上的实际平台之间的潜在问题?

编辑:我特别不明白的是其他项目没有给我提示。例如,我刚刚下载了scipy,一个包含大量依赖项的复杂库。开发人员必须先设置所有deps才能进行操作。尽管如此,svn中没有任何东西可以创造这种环境。

修改:为问题添加了赏金。我认为这是一个重要问题,值得得到更多答案。我会用现实世界的例子考虑最好的答案,特别注意任何出现的问题及其解决方案。

激励赏金的其他问题:

  • 您是否对您的环境进行测试(检查正确的安装,例如在集成机器上)?
  • 如何在发货时包含您的环境?如果它是C,你是否静态链接它,或者运行动态库,在运行可执行文件之前修改LD_LIBRARY_PATH? python,perl和其他的同样问题怎么样?
  • 您是否坚持运行时,或者随着时间的推移更新它?您是否下载了依赖库或固定版本的“trunk”软件包?
  • 你如何应对这样的情况:库foo需要python 2.5,但你需要在python 2.4中开发,因为库栏不能与python 2.5一起使用?

2 个答案:

答案 0 :(得分:1)

我们使用CMake脚本生成Makefiles,下载(主要通过SVN)/ configure / build我们所有的依赖项。为何选择CMake?多。这非常有效,我们支持调用scons / autopain / cmake。当我们在几个平台(Windows,MacOSX,一堆Linux变体)上构建时,我们还支持基于操作系统的不同编译标志等。通常,库具有默认配置,如果遇到需要特殊配置的系统,则配置将替换为专用配置。这非常有效。我们并没有真正找到适合我们目的的现成解决方案。

话虽如此,它是一个PITA来启动和运行 - 当你需要支持多个操作系统时,需要转动许多旋钮。我认为它不会成为维护噩梦,因为依赖关系是非常固定的(库经常升级,但我们很少引入新的)。

答案 1 :(得分:1)

virtualenv很好,但它无法做到魔法 - 例如如果你想使用一个只需要Python 2.4 的库和另一个绝对需要2.5的库,那你就不走运了。当有一个全新的操作系统发布时,virtualenv(或任何其他工具)也无法提供帮助,有一半的工具只是不支持它,正如你在Snow Leopard中提到的那样:有些问题根本无法解决(两个问题)其他人只需要耐心(直到你需要的所有工具都移植到新的操作系统版本中,你只需要坚持以前的操作系统版本)。