2011-01-08 5 views
8

Ho creato qualche programma usando python su Windows Vista. Ma voglio distribuirlo su Windows XP. È necessario creare nuove build su Windows XP? O c'è la possibilità di creare build che funzionerà su entrambi questi sistemi?E 'possibile creare exe su Vista e distribuire su XP usando py2exe

EDIT (EDIT 2 - molto semplice programma non funziona anche): mia messa a punto:

from distutils.core import setup 
import py2exe 

setup(console=['orderer.py']) 

Utilizzando dipendenza esploratore ho controllato che le dipendenze sono:

msvcr90.dll 
kernel32.dll 
    +ntdll.dll 

quasi risolto :

ho capito che installi ng: http://www.microsoft.com/downloads/details.aspx?FamilyID=9b2da534-3e03-4391-8a4d-074b9f2bc1bf&displaylang=en fa la cosa. Ma ho provato a fornire manualmente msvrc90.dll prima e non ha funzionato, c'è un modo per ridistribuirlo automaticamente? O devo fornirgli questo file di installazione.

Ultimo e il problema principale

ora ho problema con msvcrt.dll. Messaggio che si è verificato su Windows XP:

Il punto di ingresso di procedura wcsscpy_s non ha potuto essere situato nella dinamica collegamento libreria msvcrt.dll

Su Vista dispongo versione 7.0.6001.18000

Ma su XP 7.0.2600.5512

C'è un modo per risolvere questo problema?

Sembra che non ha escluso ... stupido errore di pochi dll:

$ grep -lir msvcrt.dll . 
./buildout 
./buildtest.py 
./dist/ACTIVEDS.dll 
./dist/adsldpc.dll 
./dist/ATL.DLL 
./dist/credui.dll 
./dist/DSOUND.dll 
./dist/MAPI32.dll 
./dist/PROPSYS.dll 
./dist/WLDAP32.dll 

Ora funziona!

risposta

3

Creare un file denominato "Microsoft.VC90.CRT.manifest" con il seguente contenuto accanto al file eseguibile creato da py2exe e msvcr90.dll, msvcp90.dll e file msvcm90.dll:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?> 
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0"> 
    <noInheritable/> 
    <assemblyIdentity 
     type="win32" 
     name="Microsoft.VC90.CRT" 
     version="9.0.21022.8" 
     processorArchitecture="x86" 
     publicKeyToken="1fc8b3b9a1e18e3b" 
    /> 
    <file name="msvcr90.dll" /> 
    <file name="msvcp90.dll" /> 
    <file name="msvcm90.dll" /> 
</assembly> 
+0

Dopo aver creato questo file e aggiungendo queste dll, ottengo ancora "Il punto di inserimento della procedura wcsscpy_s non può essere localizzato nella libreria di collegamento dinamico msvcrt.dll" – dfens

+0

Il tuo programma non dovrebbe dipendere da due librerie di runtime C. Prova a trovare da dove proviene la dipendenza di msvcrt.dll, ad es. utilizzando DependencyWalker (http://www.dependencywalker.com/) nei file * .pyd e * .dll. – cgohlke

+0

ok lo vedo, è _ctypes.pyd – dfens

2

se hai python a 32 bit sul tuo sistema Vista e usi py2exe per creare un exe, dovrebbe funzionare anche su XP.

hai avuto problemi? Se sì, quali sono?

+0

C'è solo un messaggio: il sistema non può eseguire il programma specificato. – dfens

+0

puoi aggiornare la tua domanda con maggiori informazioni? come lo script disutils che stai usando per compilare l'exe. Molto probabilmente, ti manca qualche dll sul sistema XP di destinazione che dovresti includere anche. –

Problemi correlati