A_N_K Skrevet 17. oktober 2005 Del Skrevet 17. oktober 2005 Har støtt på et problem jeg ikke helt forstår i forbindelse med den innebygde funksjonen execfile. Hvis jeg sender med argumenter for både globals og locals til denne funksjonen fungerer ikke importering av moduler i skriptet som blir eksekvert som forventet. Dvs. at moduler som blir importert på globalt nivå i skriptet havner i locals og blir dermed ikke tilgjengelige for funksjoner i det eksekverte skriptet. Er dette meningen? Problemet dukker opp i forbindelse med distutils.core.run_setup som bruker denne funksjonen, og dermed fungerer ikke setup-skript som forventet. Lenke til kommentar
A_N_K Skrevet 18. oktober 2005 Forfatter Del Skrevet 18. oktober 2005 Så ut til å være en bug i distutils.core.run_setup dette, har ikke sett noen annen løsning enn å skrive min egen implementasjon Lenke til kommentar
Psy Skrevet 10. november 2005 Del Skrevet 10. november 2005 Litt gammel tråd, men tviler på at det er en bug. Om du sender med en egendefinert globals dictionary vil ikke modulene være loadet i scriptet som blir eksekvert nettopp fordi en modul ikke er noe annet enn en attributt som ligger i globals dictionarien i scriptet ditt. Du må isåfall gjøre noe ala: import sys dic = {} dic["sys"] = sys execfile("test.py",dic,dic) test.py inneholder: print sys.argv Lenke til kommentar
A_N_K Skrevet 10. november 2005 Forfatter Del Skrevet 10. november 2005 (endret) Nå husker jeg ikke akkurat hva bøggen gikk på, men det var altså distutils.core.run_setup som brukte execfile galt. På distutils SIG fikk jeg beskjed om at det var knapt den eneste feilen i distutils-implementasjonen (forfatteren av setuptools anbefalte meg å skrive min egen versjon av run_setup). Endret 10. november 2005 av A_N_K Lenke til kommentar
A_N_K Skrevet 10. november 2005 Forfatter Del Skrevet 10. november 2005 Har sjekket hva det gikk ut på .. Tingen er at hvis man skulle finne på å spesifisere et eget locals-dict for execfile vil moduler importert i globalt skop i den eksekverte fila havne i locals() for det globale skopet, og ikke i globals(). Til vanlig er locals() og globals() i globalt skop ett og samme objekt. Det som skjer er at setup-skript kjørt i run_setup kræsjer fordi funksjoner ikke kan aksessere globalt importerte moduler. Lenke til kommentar
Anbefalte innlegg
Opprett en konto eller logg inn for å kommentere
Du må være et medlem for å kunne skrive en kommentar
Opprett konto
Det er enkelt å melde seg inn for å starte en ny konto!
Start en kontoLogg inn
Har du allerede en konto? Logg inn her.
Logg inn nå