Перейти до змісту

Шляхи пошуку модулів

Під час виконання імпорту модуля 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 є кілька варіантів:

  1. Перемістити скрипт в каталог site-packages
  2. Створити спеціальний файл із розширенням 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.