2009-10-07 61 views
8

今天我試着在我編寫的腳本中使用pyPdf 1.12,它的目標是Python 2.6。當運行我的腳本,甚至導入pyPdf時,我會收到有關不推薦使用的功能(md5-> hashsum,sets)的抱怨。我想貢獻一個補丁來使這個工作在2.6中乾淨利落,但我想作者不想破壞老版本(2.5及更早版本)的兼容性。在你的代碼中支持多個Python版本?

搜索谷歌和堆棧溢出迄今沒有發現什麼。我覺得我已經看到嘗試/除了導入語句塊之前,完成類似的東西,但找不到任何示例。是否有支持多個Python版本的普遍接受的最佳實踐?

回答

10

有兩種方法可以做到這一點:


(1)就像你描述:嘗試異常周圍的東西和工作舊版本。例如,你可以嘗試導入json模塊和導入用戶空間實現如果失敗:

try: 
    import json 
except ImportError: 
    import myutils.myjson as json 

這是Django的一個例子(他們使用這種技術常):

try: 
    reversed 
except NameError: 
    from django.utils.itercompat import reversed  # Python 2.3 fallback 

如果迭代器reversed可用,他們使用它。否則,他們從utils包中導入他們自己的實現。


(2)明確地比較Python解釋的版本:

import sys 
if sys.version_info < (2, 6, 0): 
    # Do stuff for old version... 
else: 
    # Do 2.6+ stuff 

sys.version_info是可以很容易地與類似的版本的元組相比較的元組。

0

Python 的多個版本支持這裏。您可以a)有條件地使用較新的版本,這需要一點工作,或b)關閉警告,這應該是默認的(並且在較新的Pythons上)。