传输Python模块

时间:2009-04-07 22:05:48

标签: python

基本上对于这种情况,我在Python v2.6中使用_winreg模块,但我必须使用的python包是v2.5。当我尝试使用时:

_winreg.ExpandEnvironmentStrings

它抱怨此模块中没有此属性。我已成功从site-packages文件夹中转移了其他模块,如comtypes。

但问题是我不知道要复制/替换哪些文件。有没有办法做到这一点?也是网站包装第三方模块的主要位置?

1 个答案:

答案 0 :(得分:2)

它是一个已编译的C扩展,而不是纯Python,因此您通常不能简单地将DLL / so文件从一个安装复制到另一个安装:Python二进制接口更改0.1版本号更新(但不是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而无法担心。