2009-04-07 36 views
0

基本上爲這種情況下,我使用在Python V2.6的_winreg模塊但Python包我必須使用V2.5是。當我嘗試使用時:傳輸Python模塊

_winreg.ExpandEnvironmentStrings 

它抱怨在此模塊中沒有此屬性。我已成功地從站點包文件夾中傳輸其他模塊,例如comtypes。

但問題是我不知道要複製的文件/替換。有沒有辦法做到這一點?網站還包含第三方模塊的主要地點?

+0

你爲什麼要到圖書館拷貝過來的2.6.x的擺在首位,以2.5.X? IIRC這是標準庫的一部分,所以它應該在那裏可用... – 2009-04-07 22:12:08

+0

由於ExpandEnvironmentStrings在2.5中不可用。 – 2009-04-07 22:30:48

回答

2

這是一個編譯的C擴展,而不是純Python,所以你一般不能簡單地複製DLL /所以從一個安裝跨文件到另一個問題:在0.1版本號更新了Python二進制接口的變化(但不是0.0.1更新)。在任何情況下,_winreg似乎都是在當前的官方Windows版本上靜態構建到Python.exe中,而不是被放入'DLLs'文件夾中。

_winreg.ExpandEnvironmentStrings在2.6版之前不可用,但可以有用地回退到os.path.expandvars,它或多或少地做了同樣的事情。 (它也支持$ VAR變量,在Windows下您可能不希望,但是這可能不是一個實際的問題。)你是對的:在Windows下expandvars%-syntax在2.6,只介紹瞭如何沒用。看起來你需要下面的內容。

如果出現最壞最壞的它是相當簡單的手工編寫:

import re, os 

def expandEnvironmentStrings(s): 
    r= re.compile('%([^%]+)%') 
    return r.sub(lambda m: os.environ.get(m.group(1), m.group(0)), s) 

雖然無論哪種方式,總有Python的2.X的無法讀取的Unicode envvars中的後顧之憂。