2010-02-23 10 views
6

Ho bisogno di mantenere un numero elevato di macchine Windows XP che eseguono la stessa versione di python, con un assortimento di moduli, uno dei quali è python-win32. Ho pensato di installare python su un'unità di rete che è montata da tutte le macchine client e aggiustare semplicemente il percorso sui client. Python avvia bene dalla rete, ma durante l'importazione win32com ottengo un errore di pop-up dicendo:Installazione di python con estensioni python win32 su un'unità di rete

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

dopo chiudere la finestra di messaggio che ricevo nella console:

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

ho cercato il pitone directory per pywintypes24.dll ed è presente in "Lib \ site-packages \ pywin32_system32".

Cosa mi manca e c'è un altro modo in cui posso installare Python + Python-Win32 + un modulo aggiuntivo una volta e averli in esecuzione su molte macchine? Non ho accesso agli strumenti di gestione dei sistemi Microsoft, quindi ho bisogno di essere un po 'più low-tech di così.

risposta

7

Su ogni macchina è necessario eseguire una volta sola seguendo pywin32_postinstall.py -install. Supponendo che l'installazione di pitone sulla rete è N:\Python26, eseguire seguente comando su ogni client:

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

Un'altra cosa importante è Good Luck!. Il motivo è che potrebbe essere necessario farlo come admin. Nel mio caso tale configurazione ha funzionato per tutti tranne un computer. Non ho ancora capito perché.

0

"" "Ho cercato la directory python per pywintypes24.dll ed è presente in" Lib \ site-packages \ pywin32_system32 "" "". L'esistenza della DLL non è in discussione. È quel punto di ingresso in quella dll?

Hai provato a installare esattamente la stessa configurazione su un'unità non di rete?

Hai provato a importare altri moduli nel pacchetto?

Avete controllato le DLL con il Dipendente Walker o qualcosa di simile?

Il "24" in pywintypes24.dll significa Python 2.4? Quale versione di Python stai usando?

+0

Sì, la DLL contiene il punto di ingresso citato, e ha lo stesso md5sum della DLL sul mio locale C: installazione che non ha problemi a caricare il modulo win32com. – florin

0

Si potrebbe utilizzare batch files running at boot per

  • Montare la condivisione di rete (net use \\server\share)
  • Copia i programmi di installazione di Python e pacchetti dalla condivisione di rete in una cartella locale
  • Controllare la versione del programma di installazione MSI contro il installati versione
  • Se diverso, disinstallare Python e tutte le versioni pacchetti dipendenti
  • Reinstallare tutti i pacchetti

Questo sarebbe praticamente un rotolo il proprio sistema di gestione centrale per quel software.

1

Python (o precisamente, il sistema operativo) ricerca le DLL utilizzando os.environ ["PATH"] e non cercando sys.path.

Quindi potresti avviare Python utilizzando un semplice file .cmd che invece aggiunge \ server \ share \ python26 al percorso (dato che l'installatore (o tu) ha copiato le DLL da \ server \ share \ python26 \ lib \ site- pacchetti \ pywin32-system32 a \ server \ share \ python26).

alternativa, è possibile aggiungere il seguente codice ai tuoi script prima di tentare di importare Win32API ecc:

# 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