在应用程序之间共享/管理内部python库的最佳方式
我们公司(xyz)正在将我们的许多Flash代码迁移到Python 在Flash中,我们在Flash应用程序包xyz之间有一个共享库。我们可以对软件包进行更改,而不用担心在部署其他应用程序时破坏它们,因为Flash编译它们的代码并包含库的内容。我们通过RPM部署了最终的SWF,我们完成了。对App1和App2的更新不会破坏App3 您将如何在Python中实现这一点,即共享库依赖关系 App1、App2和App3可能都需要xyz-lib.rpm,并且都使用相同的库文件,但是每次有新库时,更新的xyz-lib.rpm都必须针对App1、2、3进行显式测试,这非常繁重 我目前最喜欢的解决方案——我可以让app1.rpm在打包时包含库——实际上是库的某种静态链接。然而,这感觉不雅。(尽管唯一的额外成本是硬盘空间==便宜。) 我知道对共享库的可靠管理可能是最好的解决方案,但我一直试图考虑到所有开发人员都是人,并且会犯错误。我们会犯错误,我不想让app1的部署破坏app2和app3-这只是需要更多的测试和调试。“每次有新库时都针对app1,2,3进行显式测试”实际上并不那么繁重 两件事在应用程序之间共享/管理内部python库的最佳方式,python,deployment,shared-libraries,projects-and-solutions,Python,Deployment,Shared Libraries,Projects And Solutions,我们公司(xyz)正在将我们的许多Flash代码迁移到Python 在Flash中,我们在Flash应用程序包xyz之间有一个共享库。我们可以对软件包进行更改,而不用担心在部署其他应用程序时破坏它们,因为Flash编译它们的代码并包含库的内容。我们通过RPM部署了最终的SWF,我们完成了。对App1和App2的更新不会破坏App3 您将如何在Python中实现这一点,即共享库依赖关系 App1、App2和App3可能都需要xyz-lib.rpm,并且都使用相同的库文件,但是每次有新库时,更新的x
- 您需要库必须通过的一组正式API单元测试。这只是API,不是所有功能的细微差别。如果这一切都过去了,那么您的更改就可以继续了。如果失败,您的更改将破坏API
- 您还需要一组独立于API的功能单元测试。这更大,可能被归类为“繁重”
一旦你开始单元测试,你就会上瘾。一旦您合理地完成了测试,这个问题就很容易处理。我已经使用了它的各种变体来分发python应用程序。基本上,它包括将所有python源代码压缩到一个zip文件中,然后将其与shell脚本连接以导入源文件
如果您需要为应用程序提供自己版本的库,这会很有帮助。我也赞成将所有内容打包在一起,并将对操作系统库的依赖性限制在最低限度(glibc就是这样)。硬盘价格便宜,但客户和支持时间却不便宜 在windows上,py2exe+InnoSetup非常简单 在Linux上,这似乎是正确的处理方法。从主页上引用,它提供:
- zip/egg文件导入跟踪: bbfreeze跟踪从zip文件导入的内容,如果某个模块是从一个egg文件使用的,则包含整个egg文件。使用setuputils的pkg_资源模块的包现在可以工作了(0.95.0中新增)
- 二进制依赖项跟踪: bbfreeze将跟踪二进制依赖项,并将包括冻结程序所需的DLL和共享库