Поиск и выполнение модулей в Python с помощью функций runpy
В этой статье мы обсудим, как пользователи могут найти модули в Python и какие функции Python используются для выполнения модулей.
Расположение модулей в Python
Когда модули импортируются пользователями, интерпретатор Python будет искать модуль в текущем каталоге. Если модуль не найден в каталоге, интерпретатор будет искать каждый каталог, присутствующий в переменной оболочки, известной как PYTHONPATH. Если интерпретатору не удается найти его в оболочке, он проверяет путь по умолчанию. В UNIX путь по умолчанию: / usr / local / lib / python /.
Путь поиска модуля хранится в системном модуле sys как переменная sys.path. Эта переменная содержит текущий каталог, то есть PYTHONPATH, и значение по умолчанию, зависящее от установки.
Переменная PYTHONPATH
PYTHONPATH — это переменная на основе платформы, которая состоит из списка каталогов. Ее синтаксис такой же, как PATH переменной оболочки.
PYTHONPATH в системе Windows:
set PYTHONPATH = c: \\python3\\lib;
PYPTHONPATH в системе UNIX:
set PYTHONPATH = /usr/local/lib/python
Выполнение модулей в Python
В параметрах командной строки параметр -m используется для определения пути к данному модулю и выполняет модуль как модуль __main__ программы. Модуль runpy — это стандартный модуль Python, который используется для внутренней поддержки этого механизма. Модуль runpy позволяет размещать сценарий, используя пространство имен модуля Python вместо файловой системы.
Модуль runpy определяет две функции:
run_module()
Функция run_module() используется для выполнения кода, содержащего конкретный модуль, и возвращает результат словаря глобальных переменных модуля.
Аргумент module_name должен быть фактическим именем модуля. Предположим, что имя модуля относится к любому пакету, а не к обычному модулю. В этом случае этот пакет будет импортирован, и подмодуль __main__ внутри пакета будет выполнен, и он вернет результат словаря глобальных переменных модуля.
Специальные глобальные переменные, то есть __name__, __spec__, __file__, __cached__, __loader__ и __package__, устанавливаются в глобальном словаре перед выполнением модуля.
__name__ устанавливается в module_name + ‘.__ main__’, если названный модуль является пакетом; в противном случае он будет установлен в аргумент имя_модуля.
И __file__, __cached__, __loader__ и __package__ устанавливаются как обычно в соответствии со спецификацией модуля.
run_path()
Функция run_path() используется для выполнения программы в файле по заданному пути, и в результате она вернет словарь глобальных переменных модуля. Указанный путь может относиться к исходному файлу Python, скомпилированному файлу байт-кода или допустимой записи sys.path, содержащей модуль __main__, например zip-файлу, включающему файл __main__.py верхнего уровня.
Специальные глобальные переменные, то есть __name__, __spec__, __file__, __cached__, __loader__ и __package__, устанавливаются в глобальном словаре перед выполнением модуля.
__name__ переменной присваивается значение run_name, если этот необязательный аргумент не равен None; в противном случае будет установлено значение .
Давайте посмотрим на пример модуля runpy:
Сначала пользователь должен сохранить следующий файл как сценарий с именем runpy_example.py.
def add(p, q, r, s, t): return p + q + r + s + t def main(): p = 4 q = 6 r = 2 s = 8 t = 7 print("sum of p, q, r, s, t EnlighterJSRAW" data-enlighter-language="python"> import runpy_example as runp runp.main()
Хотя пользователь может выполнить указанный выше файл, не импортируя его:
import runpy runpy.run_module('runpy_example', run_name='__main__')
Пользователь также может использовать функцию run_path():
runpy.run_path('runpy_example.py', run_name='__main__')
Как обсуждалось ранее, runpy также поддерживает переключатель -m командной строки Python:
C:\python37>python -m runpy_example
Заключение
В этой статье мы обсудили, как пользователи могут находить модули и выполнять их, используя функции модуля runpy в Python.
How do I find the current module name in Python?
A module can find out its own module name by looking at the predefined global variable __name__. If this has the value ‘__main__’, the program is running as a script.
Example
def main(): print('Testing…. ') ... if __name__ == '__main__': main()
Output
Modules that are usually used by importing them also provide a command-line interface or a selftest, and only execute this code after checking __name__.
The__name__ is an in-built variable in python language, we can write a program just to see the value of this variable. Here’s an example. We will check the type also −
Example
print(__name__) print(type(__name__))
Output
Example
def myFunc(): print('Value of __name__ = ' + __name__) if __name__ == '__main__': myFunc()
Output
Value of __name__ = __main__
Example
Now, we will create a new file Demo2.py. In this we have imported Demo and called the function from Demo.py.
import Demo as dm print('Running the imported script') dm.myFunc() print('\n') print('Running the current script') print('Value of __name__ = ' + __name__)
Output
Running the imported script Value of __name__ = Demo Running the current script Value of __name__ = __main__