2009-04-07 1 views
0

В основном для этого случая я использую модуль _winreg в Python v2.6, но пакет python, который я должен использовать, - v2.5. Когда я пытаюсь использовать:Перенос модулей Python

_winreg.ExpandEnvironmentStrings 

жалуется на отсутствие этого атрибута в этом модуле. Я успешно передал другие модули, такие как comtypes из папки site-packages.

Но проблема в том, что я не знаю, какие файлы нужно скопировать/заменить. Есть ли способ сделать это? Также сайт-пакеты являются основными местами для сторонних модулей?

+0

Почему вы хотите скопировать эту библиотеку для 2.6.x в 2.5.x в первую очередь? IIRC это часть стандартной библиотеки, поэтому она должна быть доступна там в любом случае ... –

+0

Поскольку ExpandEnvironmentStrings недоступен в версии 2.5. –

ответ

2

Это скомпилированное расширение C, а не чистый Python, поэтому вы, как правило, не можете просто скопировать DLL/файл с одной установки на другую: бинарный интерфейс Python изменяется на 0,1 обновления номера версии (но не 0.0.1 обновления). В любом случае, _winreg, по-видимому, статически встраивается в Python.exe в текущие официальные сборки Windows, а не заносится в папку «DLL».

_winreg.ExpandEnvironmentStrings не доступен до 2.6, но Вы можете с удовольствием вернуться к os.path.expandvars, который делает более-менее одно и то же. (Он также поддерживает переменные $ VAR, которые под Windows, возможно, вам не нужны, но это может быть не проблема.) Вы правы:% -syntax для expandvars под Windows был введен только в версии 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 беспокоиться.

+0

Я попробовал expandvars, но получил% TEMP% на v2.5. Я получил правильный путь в версии 2.6. –

+0

Спасибо, что ваш метод отлично работает. –

Смежные вопросы