2009-11-16 117 views
0

所以我們今天去實現了一些東西,發現有幾個應用程序依賴於我們的內部python庫的舊實現。名爲cis_py。現在,我們實現的所有應用程序都位於名爲bin的文件夾中。這是cis_py當前所在的位置。衝突的Python包如何解決?

現在我們開始部署我們的一個大型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嗎?

+0

「基本上我不能更新現有的應用程序,也不能重寫新的應用程序」這是一個非常非常糟糕的政策。有人需要解決一些問題。說它不能解決的只是要求人們創造更大更糟的問題。 – 2009-11-17 01:01:01

回答

4

嘗試import sys; sys.path.insert(0, "cis")作爲您的主要Python文件的開始。

+0

非常感謝你 – UberJumper 2009-11-16 17:41:49

0

第一步是開始告訴人們這個問題。與您的同事和老闆交談,並告知他們您發現的問題,因爲它是可能的在解決方案正常工作時,上線將不得不取消或推遲。必須在某個地方進行更改,並且執行其他測試以驗證這些更改不會破壞任何內容,這是很好的(也可能需要)。

不知道你的系統是如何運行的,有一種猜測是,也許你可以在一個修改後的環境下運行新版本,並將其引導到新版本的庫中?

+0

那麼,這件事,我們不能張貼它,因爲今天的東西開始。我們無法控制另一個組織的時間表。 – UberJumper 2009-11-16 17:42:48

+0

問題是,你需要確保你的同事和老闆現在已經意識到了這個問題,而不是在你還在試圖解決問題的一天結束時。有許多類型的不可以,其中一些類型必須是靈活的。 – jcdyer 2009-11-16 17:49:44

0

向名稱添加一個版本:cis_py2。您可能不得不在班級的變化,但沒有什麼不能用一個快速的腳本來完成(不沒有測試它第一次運行此):

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

這假定cis_py僅僅是模塊名稱沒有別的名字。

1

看起來像Alex Martelli的解決方案爲您解決了緊急情況。這是另一種解決方案,我認爲長期來看會更好。

在源文件,用線

import cis.cis_py as cis_py 

這樣,當以後的代碼表示from cis_py import foo,它會工作更換線

import cis_py 

這是不太「神奇」的,因爲每個源文件都會包含這個改變的導入行,因此研究源文件的人會理解cis_py模塊的真實來源(無需研究主Python源文件)。