#python #os.path #sys.path
#python #os.path #sys.path
Вопрос:
Я довольно новичок в мире Python и хотел бы знать, может ли кто-нибудь объяснить эту строку кода?
Я знаю, что он добавляет каталог целевого файла в sys.path, но не знаю, как это происходит.
sys.path.append(os.path.dirname(os.path.dirname(__file__)))
Комментарии:
1. Вы уверены, что это не
os.path.dirname(os.path.realpath(__file__)
так?2. На самом деле я не уверен, так как я не знаю, что делает эта строка кода. Приведенная выше строка также взята из другого ответа stackoverflow о sys.path.
Ответ №1:
Давайте начнем с объяснения некоторых вещей:
__file__
это встроенный Python. Он выдает абсолютный путь к текущему исполняемому скрипту.os.path.dirname
возвращает каталог с заданным именем пути, например, если ввести входные/a/b/c/d
данные, это даст/a/b/c
результат.sys.path
это список каталогов, которые Python будет использовать для поиска модулей при попытке импортировать что-либо.
os.path.dirname(__file__)
возвращает родительский каталог текущего выполняемого скрипта (т.е. ../
)
os.path.dirname(os.path.dirname(__file__))
возвращает родительский каталог родительского каталога текущего выполняемого скрипта. (т.е. ../../
)
os.path.append(os.path.dirname(os.path.dirname(__file__)))
зарегистрирует родительский каталог родительского каталога текущего исполняемого скрипта в качестве места для поиска новых модулей.
Итак, допустим, у нас есть следующая структура каталогов:
a
|- b
|- c
|-----d
| |----e
| | |---- f
| | | |- main.py
| | |- bar.py
| |- foo.py
|- foobar.py
Если предоставить скрипт, содержащий этот код main.py
, то конечным результатом будет sys.path.append('/a/d/e')
, так что вы сможете сделать import bar
(но не import foo
или import foobar
)
Комментарии:
1. Спасибо! Действительно! С вашим объяснением о том, что такое os.path.dirname() и file на самом деле, теперь мне все ясно.