Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/292.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在应用程序之间共享/管理内部python库的最佳方式_Python_Deployment_Shared Libraries_Projects And Solutions - Fatal编程技术网

在应用程序之间共享/管理内部python库的最佳方式

在应用程序之间共享/管理内部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

我们公司(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进行显式测试”实际上并不那么繁重

两件事

  • 您需要库必须通过的一组正式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和共享库

出于好奇,我可以问一个问题吗(如果不是秘密的话)?你怎么能用python取代flash??(我开始想象睡衣之类的东西,但甚至…)我们正在Flash中使用一些GUI应用程序/游戏,并用pyGame和pyglet取代它们。此外,许多实用程序脚本和服务器守护进程都是用Python编写的。哇,你让我发现了flex pypy!!谢谢代码生成规则和Pypy规则:)我真的必须看看这些。