冲突的Python包如何解决?

时间:2009-11-16 17:20:21

标签: python packages

所以今天我们去实现一些东西,发现已经有几个应用程序依赖于我们内部python库的旧实现。被称为cis_py。现在,我们实现的所有应用程序都位于名为bin的文件夹中。这是cis_py目前所在的位置。

现在我们去部署我们的一个大型python应用程序,它们使用我们内部库的新版本。我们不能简单地覆盖它的现有版本。因为这会导致所有现有应用程序中断。

基本上我不能更新现有的应用程序,也不能重写新的应用程序。现在我正在考虑尝试以下方法:

cis\cis_py\<python library files>

然后搜索并替换现有应用程序并更改以下内容:

cis_py.<some python file>

cis.cis_py.<some python file>

不幸的是,由于使用了以下内容,导致库中的几个__init__.py文件中断:

from cis_py import rga
from cis_py import util

今天是实施日,今天必须上线,因为几个小时后我们就会开始自动接收数据。

我怎么做,怎么做?一切都必须驻留在一个名为bin的文件夹中。由于自动处理系统。有什么方法可以欺骗python吗?

4 个答案:

答案 0 :(得分:4)

尝试import sys; sys.path.insert(0, "cis")作为主Python文件的开头。

答案 1 :(得分:1)

看起来Alex Martelli的解决方案为您解决了紧急情况。这是另一个解决方案,我认为从长远来看会更好。

在源文件中,替换

import cis_py

import cis.cis_py as cis_py

这样,当后来的代码显示from cis_py import foo时,它就会起作用。

这不那么“神奇”,因为每个源文件都会包含这个更改的导入行,因此研究源文件的人将理解cis_py模块的真正来源(无需研究主要的Python源文件)。 / p>

答案 2 :(得分:0)

第一步是开始告诉人们这个问题。与您的同事和老板交谈并告知他们您发现的问题,因为可能在处理解决方案时必须取消或推迟上线。必须在某处进行更改,并且执行额外的测试以验证这些更改不会破坏任何内容,这将是好的(并且可能是必需的)。

不知道你的系统是如何运行的,一个猜测是,你可以在修改后的环境下运行新版本,将其引导到新版本的库中吗?

答案 3 :(得分:0)

在名称中添加一个版本:cis_py2。您可能必须在类中进行更改,但不能使用快速脚本执行任何操作(如果不先测试它,请不要运行它):

sed 's/cis_py/cis_py2/g' `find -name '.py$'`

这假设cis_py只是模块名称而没有其他名称。