2010-02-17 33 views
13

我有一些代碼,我試圖使它與ESRI的地理處理器很好地發揮作用。但是,ESRI的地理處理器在Python 2.2,2.3,2.4,2.5上運行。我們需要使我們的工具能夠在任何版本上工作。所以我花了很多時間爲不同版本的工作和編碼解決方案,這樣封裝地理處理器在所有版本中都具有相同的功能。如何查看代碼是否向後兼容Python?

現在這裏有一件大事,是否有某種應用程序可以基本上掃描模塊,以查看它的語法和方法是否與上面的Python版本向後兼容?

不幸的是,我無法安裝Python 2.2,因爲我有Arcgis 9.3,它需要Python 2.5。反之亦然,我已經獲得了幾乎所有的模塊依賴關係的排序和解決方案。 (win32com,ctypes等)。

但是我很擔心我的實際代碼,我可能會花幾個小時去閱讀哪些關鍵字添加了什麼版本等,但是這基本上是一個非常頭痛的問題。是否有某種應用程序可以執行這些操作?

+0

[確定什麼是最低版本的Python所需的工具的可能的重複?](http://stackoverflow.com/questions/804538/tool-to-determine-what-lowest-version-of-python-required) –

回答

11

如果您正在積極開發一個商業產品,你-really-要正確地支持所有這些版本中,我建議:

  1. 編寫可運行和測試功能,用於自動測試套件你的整個圖書館/應用程序/不管。

  2. 爲每個測試環境(python 2.2-2.6和任何平臺組合,如果您的產品不只是win32)設置一臺機器或理想的虛擬機。鑑於現在有幾種免費的虛擬化產品(VirtualBox和VMWare Server,名稱爲兩個),現在這樣做尤其容易(0128)。 。

然而,我可能會提到,2.2和2.3之間,以及2.3和2.4之間的重大變化。這就是爲什麼大多數的python庫只支持2.3,而現在一些數字只支持2.4。

每一個主要版本有一個「什麼是在Python 2.x的新」的文件,但編碼2.2意味着你錯過:

  • 發電機(2.3)(嗯,事實上,你可以讓他們在2.2與from __future__ import generators
  • 生成器表達式(2.4)
  • 子進程模塊(2.4)
  • 裝飾語法(2.4)
  • 集(2.3)
  • 十進制(2。4,但可以反向移植)
  • 日期時間(2.3)
  • itertools(2.3)

僅舉的你可能不能真棒東西非常小的子集。

你必須真的考慮你想支持一個7歲的python版本有多糟,並錯過了很多很酷的功能,可以減少你的代碼大小(或可能只是增加可讀性)。

+0

大致上,平均有50%以上的arcgis用戶仍在使用9.1/9.0。分別需要2.3或2.2。你不能使用他們的python模塊,而沒有他們需要的相應版本的python。它吸我知道。但ESRI並沒有真正給出一個該死的。特別是當有3個不同的API時,9.3有pythonic api,9.2不是pythonic,而是通過枚舉完成所有事情。 9.1和更低版本使用自定義COM庫和win32com.client.Dispatch的bizzare mishmash。它吸我知道。 – UberJumper

+0

看來你可以從自動化測試套件和buildbot中獲益很多。特別是如果你希望你的產品與3個完全不同的API一起工作,一些經過深思熟慮的迴歸測試將爲未來帶來巨大的收益。許多項目都將其buildBot配置爲在每次VCS提交時運行,然後在任何測試失敗時通過電子郵件發送它們。這可以更快地重新引入新bug。 – Crast

9

嘗試pyqver:https://github.com/ghewgill/pyqver/

給你定的Python腳本分析所使用的關鍵字和模塊的最低版本。另外,您可以在本地編譯python 2.2並使用virtualenv創建一個帶有--python標誌的python 2.2環境。

+0

virtualenv需要setuptools,它需要python 2.3.5及更高版本。另外,快速瀏覽一下virtualenv.py本身就會顯示它導入到「日誌記錄」中,這隻能從Python 2.3開始。它還需要2.4中的「subprocess」模塊,該模塊可以被反向移植到2.3,但即使代碼本身也承認儘可能多的工作。是的,python 2.2實際上是生命的終結,即使有很多有用的工具也不支持python 2.2。 – Crast

+0

那真棒。我會稍微給出一點。但真的只是看某些事情。我想我會蜷縮起來哭泣。 – UberJumper

+0

另外我不能安裝python的低級版本,因爲它們會阻止我使用我安裝的任何arcgis地理處理python庫。它需要是一個匹配的版本,我不能在一臺機器上安裝多於一個版本的arcgis。所以我想我會看看虛擬拳擊,看看我能做些什麼。啊。 – UberJumper