Установка python с расширениями python win32 на сетевой диск

Мне нужно, чтобы на большом количестве компьютеров с Windows XP работала одна и та же версия Python с набором модулей, одним из которых является python-win32. Я подумал об установке python на сетевой диск, который монтируется всеми клиентскими машинами, и просто настроить путь на клиентах. Python нормально запускается из сети, но при импорте win32com я получаю всплывающее сообщение об ошибке:

Точка входа в процедуру ?PyWinObject_AsHANDLE@@YAHPAU_object@@PAPAXH@Z не может быть расположена в библиотеке динамической компоновки pywintypes24.dll

после закрытия диалогового окна сообщения я получаю в консоли:

ImportError: Ошибка загрузки DLL: указанная процедура не найдена.

Я искал в каталоге python файл pywintypes24.dll, и он присутствует в «Lib\site-packages\pywin32_system32».

Что мне не хватает, и есть ли другой способ, с помощью которого я могу один раз установить Python + Python-Win32 + дополнительный модуль и запустить их на многих машинах? У меня нет доступа к инструментам управления системами Microsoft, поэтому мне нужно быть немного менее технологичным.


person florin    schedule 23.02.2010    source источник
comment
Я искал в каталоге python pywintypes24.dll, и он присутствует в Lib\site-packages\pywin32_system32 . Существование dll не вызывает сомнений. Это точка входа в этой dll? Вы пытались установить точно такую ​​же конфигурацию на несетевой диск? Пробовали ли вы импортировать другие модули в пакете? Вы проверили dll с помощью обходчика зависимостей или чего-то подобного? Означает ли 24 в pywintypes24.dll Python 2.4? Какую версию Python вы используете?   -  person John Machin    schedule 23.02.2010
comment
Да, DLL содержит точку входа в кавычках и имеет ту же md5sum, что и DLL в моей локальной установке C:, которая без проблем загружает модуль win32com.   -  person florin    schedule 23.02.2010


Ответы (3)


На каждой машине вам нужно запустить pywin32_postinstall.py -install один раз. Предполагая, что ваша установка python в сети N:\Python26, выполните следующую команду на каждом клиенте:

N:\Python26\python.exe N:\Python26\Scripts\pywin32_postinstall.py -install

Еще одна важная вещь — Good Luck!. Причина в том, что вам может понадобиться сделать это как admin. В моем случае такая установка работала на всех компьютерах, кроме одного. Я так и не понял почему.

person van    schedule 23.02.2010

Python (точнее, ОС) ищет библиотеки DLL с помощью os.environ["PATH"], а не с помощью поиска sys.path.

Таким образом, вы можете запустить Python, используя вместо этого простой файл .cmd, который добавляет \server\share\python26 к пути (учитывая, что установщик (или вы) скопировал библиотеки DLL из \server\share\python26\lib\site-packages\pywin32- system32 в \server\share\python26).

Или вы можете добавить следующий код в свои сценарии, прежде чем они попытаются импортировать win32api и т. д.:

    # Add Python installation directory to the path, 
    # because on Windows 7 the pywin32 installer fails to copy
    # the required DLLs to the %WINDIR%\System32 directory and
    # copies them to the Python installation directory instead.
    # Fortunately, in Python it is possible to modify the PATH
    # before loading the DLLs.
    os.environ["PATH"] = sys.prefix + ";" + os.environ.get("PATH")
    import win32gui
    import win32con
person Henning    schedule 07.02.2011

Вы можете использовать пакетные файлы, запускаемые при загрузке, чтобы

  • Смонтируйте сетевую папку (net use \\server\share)
  • Скопируйте установщики Python и пакетов из сетевой папки в локальную папку.
  • Проверить версию установщика msi на установленную версию
  • Если отличается, удалите Python и все пакеты, зависящие от версии.
  • Переустановите все пакеты

Это было бы в значительной степени свертыванием вашей собственной центральной системы управления для этого программного обеспечения.

person Esteban Küber    schedule 23.02.2010