Come posso utilizzare un percorso relativo in un modulo Python quando la CWD è cambiato?
-
10-10-2019 - |
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!
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()
.