Редагувати: на основі коментаря Ульфа Ромпе важливо використовувати "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)
, ніби ви вручну вставляєте шлях, я думаю, можна з упевненістю сказати, що це той шлях, який ви хочете використовувати!
Або у мене щось не так? Це питання мене іноді турбує, і я хотів, щоб це було відкрито!
sys.path.insert(1, dev_folder)
але він все ще не знаходить модуль dev, а лише використовує встановлений модуль. Як це виправити?