Подтвердить что ты не робот

Как использовать относительный путь в модуле Python при изменении CWD?

У меня есть модуль Python, который использует некоторые ресурсы в подкаталоге каталога модулей. После поиска по переполнению стека и поиска соответствующих ответов мне удалось направить модуль на ресурсы, используя что-то вроде

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

Это отлично работает, когда я вызываю модуль из другого места, но он прерывается, когда я вызываю модуль после изменения текущего рабочего каталога. Проблема в том, что содержимое __file__ является относительным путем, который не учитывает тот факт, что я сменил каталог:

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

Как я могу кодировать абсолютный путь в __file__ или запрещать это, как я могу получить доступ к моим ресурсам в модуле независимо от того, что представляет собой текущий рабочий каталог? Спасибо!

4b9b3361

Ответ 1

Сохраните абсолютный путь в каталоге модуля в самом начале модуля:

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

Затем загрузите ресурсы на основе этого package_directory:

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

И в конце концов, не изменяйте ресурсы процесса, такие как текущий рабочий каталог. Никогда не нужно менять рабочий каталог в хорошо написанной программе, поэтому избегайте os.chdir().