Domanda

Ho un modulo Python che utilizza alcune risorse in una sottodirectory della directory del modulo. Dopo la ricerca in giro su stack overflow e trovare risposte relative, sono riuscito a dirigere il modulo alle risorse utilizzando qualcosa come

import os
os.path.join(os.path.dirname(__file__), 'fonts/myfont.ttf')

Questo funziona bene quando chiamo il modulo da altrove, ma si rompe quando chiamo il modulo dopo aver cambiato la directory di lavoro corrente. Il problema è che il contenuto di __file__ sono un percorso relativo, che non tiene conto del fatto che ho cambiato la directory:

>>> mymodule.__file__
'mymodule/__init__.pyc'
>>> os.chdir('..')
>>> mymodule.__file__
'mymodule/__init__.pyc'

Come faccio a codificare il percorso assoluto in __file__, o il blocco delle chiamate che, come posso accedere alle mie risorse nel modulo non importa quale sia la directory di lavoro corrente è? Grazie!

È stato utile?

Soluzione

memorizzare il percorso assoluto della directory del modulo proprio all'inizio del modulo:

package_directory = os.path.dirname(os.path.abspath(__file__))

In seguito, caricare le risorse sulla base di questo package_directory:

font_file = os.path.join(package_directory, 'fonts', 'myfont.ttf')

E dopo tutto, non modificare le risorse-processo vasta come la directory di lavoro corrente. Non c'è mai una vera e propria necessità di cambiare la directory di lavoro in un programma ben scritto, di conseguenza, evitare os.chdir().

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top