2010-02-23 12 views
6

Necesito mantener un gran número de máquinas con Windows XP ejecutando la misma versión de python, con una variedad de módulos, uno de los cuales es python-win32. Pensé en instalar Python en una unidad de red montada por todas las máquinas cliente, y simplemente ajustar la ruta en los clientes. Python se inicia bien desde la red, pero al importar win32com me sale un error emergente diciendo:Instalación de python con extensiones de python win32 en una unidad de red

The procedure entry point [email protected]@[email protected]@[email protected] could not be located in the dynamic link library pywintypes24.dll

después de despedir el diálogo de mensaje que recibo en la consola:

ImportError: DLL load failed: The specified procedure could not be found.

Busqué la pitón directorio para pywintypes24.dll y está presente en "Lib \ site-packages \ pywin32_system32".

¿Qué es lo que me falta y hay otra manera en que puedo instalar Python + Python-Win32 + módulo adicional una vez y tenerlos funcionando en muchas máquinas? No tengo acceso a las herramientas de administración de sistemas de Microsoft, así que necesito ser un poco más de baja tecnología que eso.

Respuesta

7

En cada máquina, básicamente debe ejecutar una vez el siguiente pywin32_postinstall.py -install. Asumiendo que su instalación de Python en la red es N:\Python26, ejecute siguiente comando en cada cliente:

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

Otra cosa importante es Good Luck!. La razón es que puede necesitar hacer esto como admin. En mi caso, esa configuración funcionó para todas las computadoras excepto una. Todavía no entendí por qué.

0

"" "Busqué en el directorio python pywintypes24.dll y está presente en" Lib \ site-packages \ pywin32_system32 "" "". La existencia del dll no está en duda. ¿Es ese punto de entrada en ese dll?

¿Ha intentado instalar exactamente la misma configuración en una unidad que no es de red?

¿Ha intentado importar otros módulos en el paquete?

¿Ha comprobado los dlls con el caminante de dependencia o algo similar?

¿El "24" en pywintypes24.dll significa Python 2.4? ¿Qué versión de Python estás ejecutando?

+0

Sí, la DLL contiene el punto de entrada citado, y tiene el mismo md5sum que la DLL en mi C local: instalación que no tiene problemas para cargar el módulo win32com. – florin

0

Usted podría utilizar batch files running at boot a

  • Monte el recurso compartido de red (net use \\server\share)
  • Copiar los instaladores de Python y paquetes desde el recurso compartido de red a una carpeta local
  • Comprobar versión del instalador MSI en contra de la versión instalada
  • Si es diferente, desinstale Python y todos los paquetes dependientes de la versión
  • Reinstale todos los paquetes

Esto sería más o menos un rollo de su propio sistema de gestión central para ese software.

1

Python (o, precisamente, el sistema operativo) busca en las DLL usando os.environ ["PATH"] y no buscando sys.path.

De modo que podría iniciar Python usando un archivo .cmd simple en su lugar que agrega \ server \ share \ python26 a la ruta (dado que el instalador (o usted) copió las DLL de \ server \ share \ python26 \ lib \ site- packages \ pywin32-system32 a \ server \ share \ python26).

O bien, puede añadir el siguiente código a sus secuencias de comandos antes de que intenten importar win32api etc:

# 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 
Cuestiones relacionadas