При написании одноразовых сценариев часто требуется загрузить файл конфигурации, изображение или что-то подобное из того же каталога, что и сценарий. Предпочтительно, чтобы это продолжало работать правильно, независимо от каталога, из которого выполняется скрипт, поэтому мы можем не захотеть просто полагаться на текущий рабочий каталог.
Нечто подобное работает нормально, если определено в том же файле, из которого вы его используете:
from os.path import abspath, dirname, join
def prepend_script_directory(s):
here = dirname(abspath(__file__))
return join(here, s)
Не желательно копировать, вставлять или переписывать эту же функцию в каждый модуль, но есть проблема: если вы переместите ее в отдельную библиотеку и импортируете как функцию, __file__
теперь ссылается на какой-то другой модуль и результаты неверны.
Возможно, мы могли бы использовать это вместо этого, но кажется, что sys.argv
также может быть ненадежным.
def prepend_script_directory(s):
here = dirname(abspath(sys.argv[0]))
return join(here, s)
Как правильно написать prepend_script_directory
Надежно и правильно?