Шляхи пошуку модулів¶
Під час виконання імпорту модуля Python спочатку шукає модуль у стандартній бібліотеці. Якщо модуль не знайдено у стандартній бібліотеці, пошук модуля йде в каталогах, вказаних у sys.path.
Список sys.path
складається з:
- поточного каталогу
- каталогів, які вказані у змінній PYTHONPATH
- шляхи за замовчуванням (залежать від того як був встановлений Python)
Шляхи пошуку модулів зберігаються у змінній sys.path:
In [1]: import sys
In [2]: sys.path
Out[2]:
['',
'/usr/lib/python39.zip',
'/usr/lib/python3.9',
'/usr/lib/python3.9/lib-dynload',
'/usr/local/lib/python3.9/dist-packages',
'/usr/lib/python3/dist-packages']
Аналогічний вивід, але у віртуальному середовищі:
In [1]: import sys
In [2]: sys.path
Out[2]:
['/home/user/venv/pyneng311/bin',
'/usr/local/lib/python311.zip',
'/usr/local/lib/python3.11',
'/usr/local/lib/python3.11/lib-dynload',
'',
'/home/user/venv/pyneng311/lib/python3.11/site-packages']
Додавання своїх скриптів до шляху пошуку модулів¶
Додавати свій скрипт до шляху пошуку модулів потрібно в тому випадку, якщо цей скрипт потрібно використовувати (імпортувати) в інших скриптах, які знаходяться в різних каталогах.
Для додавання модулів у список sys.path
є кілька варіантів:
- Перемістити скрипт в каталог site-packages
- Створити спеціальний файл із розширенням pth у каталозі site-packages і написати в цьому файлі шляхи де знаходяться ваші модулі
Конкретний шлях каталогу site-packages залежить від версії Python і того чи
використовуєте ви віртуальне оточення. Наприклад, в останньому виведенні
шлях sys.path буде "/home/user/venv/pyneng311/lib/python3.11/site-packages"
.
Якщо перемістити туди скрипт, його можна буде імпортувати з будь-якого іншого
скрипта.
Через те, що переносити файли не завжди зручно, є другий варіант - файли pth. Для цього варіанту потрібно створити файл з будь-яким ім'ям у каталозі site-packages і з розширенням pth, наприклад, my_scripts.pth, і написати в ньому шляхи до потрібних скриптів:
/home/user/repos/pyneng/examples/11_modules
/home/user/repos/pyneng/exercises/09_functions
/home/user/repos/pyneng/exercises/11_modules
/home/user/repos/pyneng/exercises/12_userful_modules
Note
Зверніть увагу, що тут мова саме про використання функцій якогось вашого скрипта в інших скриптах, не про запуск модуля з будь-якого місця у файловій системі як утиліти. Це теж можна зробити, коротко про те, як встановити скрипт з CLI інтерфейсом як утиліту в ОС. Наприклад, так встановлювалася утиліта pyneng.