11

Как получить путь к модулю?

9

Проблема: Я хочу обнаружить, изменился ли модуль. В данный момент использование inotify довольно простое, нужно лишь знать директорию, от которой вы хотите получать уведомления.

Вопрос: Как мне получить путь к модулю в Python?

5 ответ(ов)

13

Команда

import a_module
print(a_module.__file__)

действительно выдаст путь к загруженному .pyc файлу, по крайней мере, на Mac OS X. Таким образом, вы можете сделать следующее:

import os
path = os.path.abspath(a_module.__file__)

Также вы можете попробовать:

path = os.path.dirname(a_module.__file__)

чтобы получить директорию модуля.

0

Как уже упоминали другие ответы, лучший способ сделать это — использовать __file__ (что снова демонстрируется ниже). Однако есть важное замечание: __file__ НЕ существует, если вы запускаете модуль самостоятельно (т.е. как __main__).

Например, предположим, что у вас есть два файла (оба находятся в вашем PYTHONPATH):

#/path1/foo.py
import bar
print(bar.__file__)

и

#/path2/bar.py
import os
print(os.getcwd())
print(__file__)

Запуск foo.py даст следующий вывод:

/path1        # "import bar" вызывает выполнение строчки "print(os.getcwd())"
/path2/bar.py # затем выполняется "print(__file__)"
/path2/bar.py # затем завершится оператор импорта и выполнится "print(bar.__file__)"

ОДНАКО, если вы попытаетесь запустить bar.py самостоятельно, вы получите:

/path2                              # "print(os.getcwd())" работает нормально
Traceback (most recent call last):  # но __file__ не существует, если bar.py запущен как главный модуль
  File "/path2/bar.py", line 3, in <module>
    print(__file__)
NameError: name '__file__' is not defined 

Надеюсь, это поможет. Это замечание стоило мне много времени и путаницы, когда я тестировал другие представленные решения.

0

Это было тривиально.

Каждый модуль имеет переменную __file__, которая показывает его относительный путь от вашего текущего местоположения.

Поэтому получить директорию модуля для уведомления о ней просто:

os.path.dirname(__file__)
0

Ваш код на Python позволяет получить путь к каталогу, в котором находится исполняемый файл. Давайте разберем его по частям:

  1. import os — импортирует модуль os, который предоставляет функциональность для работы с файловой системой.
  2. path = os.path.abspath(__file__) — эта строка получает абсолютный путь к текущему исполняемому файлу. Переменная __file__ содержит путь к файлу, который выполняется, а функция os.path.abspath() преобразует его в абсолютный путь.
  3. dir_path = os.path.dirname(path) — здесь мы используем функцию os.path.dirname(), чтобы извлечь каталог из полного пути, полученного на предыдущем шаге. В результате dir_path будет содержать путь к каталогу, в котором находится ваш исполняемый файл.

Таким образом, итоговый код позволяет эффективно находить путь к директории, где расположен скрипт.

0

Если вы хотите получить путь к модулю без его загрузки, вы можете использовать следующий код:

import importlib.util

print(importlib.util.find_spec("requests").origin)

Пример вывода:

/usr/lib64/python3.9/site-packages/requests/__init__.py

Этот метод позволяет получить информацию о модуле, не загружая его в память, что может быть полезно для оптимизации производительности или для получения информации о модуле перед его использованием.

Чтобы ответить на вопрос, пожалуйста, войдите или зарегистрируйтесь