Gå til innhold

Anbefalte innlegg

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
Videoannonse
Annonse
  • 4 uker senere...

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

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 av A_N_K
Lenke til kommentar

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

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 konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
  • Hvem er aktive   0 medlemmer

    • Ingen innloggede medlemmer aktive
×
×
  • Opprett ny...