Зачем использовать sys.path.append(path)вместо sys.path.insert(1, path)?

Редактировать:на основе комментария Ульфа Ромпе, важно, чтобы вы использовали " 1" вместо "0" , иначе вы сломаете sys.path .

Я занимаюсь Python уже довольно давно (более года), и меня всегда смущает, почему люди рекомендуют использовать sys.path.append()вместо sys.path.insert(). Позвольте мне продемонстрировать.

Допустим, я работаю над модулем PyWorkbooks (, который установлен на моем компьютере), но одновременно я работаю над другим модулем (, скажем, PyJob), который включает PyWorkbooks. Когда я работаю над PyJob, я нахожу ошибки в PyWorkbooks, которые исправляю, поэтому я хотел бы импортировать версию для разработки.

Существует несколько способов работы с обоими (Я мог бы, например, поместить свой проект PyWorkbooks внутрь PyJob), но иногда мне все равно придется играть с путем. Однако я не могу просто выполнить sys.path.append()для папки, в которой находится PyWorkbooks . Почему? Потому что python сначала найдет мои установленные PyWorkbooks!

Вот почему вы должны сделать sys.path.insert(1, path_to_dev_pyworkbooks)

Итого:

sys.path.append(path_to_dev_pyworkbooks)
import PyWorkbooks # does NOT import dev pyworkbooks, imports installed one

или:

sys.path.insert(1, path_to_dev_pyworkbooks) # based on comments you should use **1 not 0**
import PyWorkbooks # imports correct file

Это вызвало у меня было несколько зависаний в прошлом, и мне бы очень хотелось, чтобы мы (как сообщество)начали рекомендовать sys.path.insert(1, path), как если бы вы вручную вставляли путь, я думаю, можно с уверенностью сказать, что это путь, который вы хотите использовать!

Или у меня что-то не так? Это вопрос, который иногда беспокоит меня, и я хотел, чтобы он был открытым!

81
задан dreftymac 16 December 2017 в 23:03
поделиться