Главная Веб-разработка 10 пакетов Python, которые улучшат вашу кодовую базу

10 пакетов Python, которые улучшат вашу кодовую базу

от admin

Нашли 10 топовых инструментов для программирования на Python, которые сделают код чище и эффективнее.

Data Scientist’ы и разработчики тратят немало времени на отладку кода, чтобы сделать его более эффективным и простым в дальнейшем использовании. Пользователь Medium нашел 10 пакетов Python, которые повысили его продуктивность в работе. Рассказываем, как они помогают автоматизировать форматирование кода и тестировать его на выявление ошибок на первых этапах.

Black

Это инструмент, который одновременно выявляет ошибки и форматирует код на Python. В сообществе питонистов уже давно есть PEP8, оформляющий код в едином стиле, и пойти против него — практически преступление. Black менее красивый, но при этом более консистентный, плюс его нельзя конфигурировать. Об этом даже написано в readme.md пакета:

By using it, you agree to cede control over minutiae of hand-formatting. In return, Black gives you speed, determinism, and freedom from pycodestyle nagging about formatting. You will save time and mental energy for more important matters.

Используя его, вы соглашаетесь больше не контролировать форматирование вручную. Взамен Black «обещает» скорость, определенность и свободу от придирчивого отношения к стилю pycodestyle. Тем самым вы экономите свое время и силы для более важных дел.

Форматирование кода крайне важно при работе над крупными проектами и в больших командах — код будет в разы проще читать, равно как и выявлять ошибки.

В Python 3.13.0a6 нашли встроенный JIT-компиляторtproger.ru

Для установки вводим в командную строку:

			pip install black 		

А чтобы сразу приступить к работе с дефолтными настройками, прописываем:

			black {source_file_or_directory} 		

10 пакетов Python, которые улучшат вашу кодовую базу

Неотформатированный и отформатированный с помощью Black код 

MyPy

MyPy — инструмент статической проверки типов, который поддерживает и динамическую типизацию (duck typing). Он помогает выявлять ошибки несоответствия типов в коде до его выполнения, повышает надежность программы, а еще — поддерживает другие библиотеки и разные режимы проверки типов.

Для установки вводим:

			pip install mypy 		

Пример кода с ошибками, который проверяет работу MyPy:

			from typing import List, Tuple def greet(name: int) -> str:     return f"Hello, {name}!" def add(x: int, y: str) -> int:     return x + y def average(numbers: List[int]) -> float:     total = sum(numbers)     return total / len(numbers) def get_person() -> Tuple[str, int]:     return "Robert", "twenty-two"  print(greet("Dave")) print(add(20, 21))   print(average([3, 2, 4, "4"])) age = get_person()[1] print(age + 10)   		

Вывод будет такой:

10 пакетов Python, которые улучшат вашу кодовую базу

Pydantic

Популярная библиотека для проверки данных и управления настройками. Внутри — интуитивно понятный синтаксис и user-friendly инструменты, которые проверяют данные на достоверность и соответствие заданным типам и ограничениям.

Pydantic определяет структуру данных декларативным способом с помощью аннотаций типов Python, а также использует схему JSON для интеграции инструментов и проверяет стандартные типы библиотек с помощью TydepDicts.

Вот простой пример, как работает Pydantic:

10 пакетов Python, которые улучшат вашу кодовую базу

Код без использования Pydantic и с ним

Здесь можно увидеть, как использование библиотеки Pedantic уменьшило размер кода и сделало его более понятным за счет того, что в нежелательном кастомном методе validate() особо нет необходимости.

Hypothesis

Это мощная библиотека Python для property-based тестирования, которая генерирует тестовые данные в соответствии с определенными правилами (strategies). Основная идея заключается в том, чтобы задать общие свойства программы, а Hypothesis автоматически сгенерирует множество входных данных для проверки этих свойств.

Библиотека интегрируется со многими популярными утилитами для тестирования, например, с pytest и unittest.

Установка:

			pip install hypothesis 		

Вот пример простого кода с ошибкой деления на 0, которую проверяет «Гипотеза»:

			from hypothesis import given, strategies as st   def divide(x, y):     return x/y   @given(x=st.integers(), y=st.integers()) def test_divide(x, y):     assert divide(x, y) == x/y   if __name__ == "__main__":     test_divide() 		

Тест выдаст следующее:

			test.py::test_divide FAILED                                              [100%] test.py:7 (test_divide) @given(x=st.integers(), y=st.integers()) >   def test_divide(x, y):  test.py:9:  _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _  test.py:10: in test_divide     assert divide(x, y) == x/y _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _   x = 0, y = 0      def divide(x, y): >       return x/y E       ZeroDivisionError: division by zero E       Falsifying example: test_divide( E           x=0,  # or any other generated value E           y=0, E       )  test.py:5: ZeroDivisionError   ============================== 1 failed in 0.62s ===============================  Process finished with exit code 1 		

Pre-commit

Классный фреймворк Python для управления многоязычными прекоммитами и их поддержки. Он определяет набор проверок и преобразований, которые выполняются в вашем коде автоматически перед каждым коммитом.

Читать также:
Использование Terraform и Ansible - Автоматизация инфраструктуры - Tproger

Для установки:

			pip install pre-commit1 		

Вот как это работает:

  • Создаем файл .pre-commit-config.yaml в корневой структуре проекта:
			repos:  - repo: https://github.com/abhayparashar31/IPL    rev: v4.4.0    hooks:      - id: trailing-whitespace      - id: end-of-file-fixer      - id: check-yaml  - repo: https://github.com/psf/black    rev: 23.3.0    hooks:      - id: black  		
  • Устанавливаем скрипты Git-хуков:
			pre-commit install   		
  • Сам коммит-код:
			git commit -m "Your commit message!!!"  		

Pre-commit автоматически проверит код на ошибки и исправит их.

Vulture

Пакет Python, который выявляет мертвый код в ваших проектах и выдает подробный отчет.

Мертвый код — код, который никогда не использовался и не выполнялся, он может накапливаться с течением времени, но при этом не несет никакой пользы.

Устанавливаем:

			pip install vulture 		

Работает это так:

			---- demo.py def used_function():     return "I'm used! 🤚"  def unused_function():     return "I'm never called! ⛔"  used_variable = used_function() unused_variable = "I'm defined but never used 🤙"  print(used_variable) 		
			vulture demo.py   ----------O/P example.py:4: unused function 'unused_function' (60% confidence) example.py:8: unused variable 'unused_variable' 		

Isort

Утилита командной строки и одновременно библиотека, которая упрощает жизнь разработчикам. Она сортирует import Python — упорядочивает и делает его более читабельными, группируя по типу (стандартная библиотека, сторонние и локальные) и выстраивая в алфавитном порядке внутри каждой группы.

Для установки:

			pip install isort  		

Пример до и после использования Isort:

10 пакетов Python, которые улучшат вашу кодовую базу

PyDocstyle

Утилита проверяет, соответствует ли ваши docstrings стандарту PEP 257. Это стиль, который упорядочивает высокоуровневую структуру таких строк — что они должны содержать и как их писать (при этом он не затрагивает синтаксис в самих строках).

Для установки:

			pip install pydocstyle 		

Затем пишем это и проверяем свой код:

			$ pydocstyle test.py test.py:18 in private nested class `meta`:         D101: Docstring missing test.py:27 in public function `get_user`:     D300: Use """triple double quotes""" (found '''-quotes) test:75 in public function `init_database`:     D201: No blank lines allowed before function docstring (found 1) ...  		

10 пакетов Python, которые улучшат вашу кодовую базу

Пример кода автора 

			pydocstyle demo.py 		

Вывод будет следующий:

10 пакетов Python, которые улучшат вашу кодовую базу

Bandit

Программа проверяет безопасность кода. Она ищет наиболее частые проблемы в приложениях на Python.mlt, анализирует AST (абстрактное синтаксическое дерево) и запускает набор плагинов для выявления ошибок.

Код, который проверял автор статьи на ошибки безопасности:

			import pickle import subprocess  def unsafe_deserialization(data):     return pickle.loads(data)  def command_injection(user_input):     subprocess.call("echo " + user_input, shell=True)  password = "hardcoded_password"  def get_password():     return password 		

Вот какой результат выдал «Бандит»:

10 пакетов Python, которые улучшат вашу кодовую базу

Radon

Пакет Python, который анализирует исходный код и вычисляет различные метрики, включая Cyclomatic Complexity (CC), Maintainability Index (MI), Raw metrics (SLOC, комментарии, пустые строки), и Halstead metrics. Radon помогает найти слишком сложные части кода, которые можно упростить, а также выдает отчеты для документирования и проверки кода. Пакет особенно полезен в больших проектах, когда код должен быть качественным, отлаженным и системным.

Устанавливаем:

			pip install radon 		

Код, который автор статьи тестировал на сложность:

			def complex_function(a, b, c):     if a > 0:         if b > 0:             for i in range(c):                 if i % 2 == 0:                     print("Even")                 else:                     print("Odd")         else:             while b < 0:                 b += 1                 if b == -1:                     break     elif a < 0:         if c > 0:             return c         else:             return -c     else:         return b  def simple_function():     return "Hello, World!" 		

Для теста: random cc code.py

			complex_function.py     F 1:0 complex_function - B (9)     F 23:0 simple_function - A (1) 		

Чтобы эффективнее использовать Radon, можно создать файл конфигурации random.cfg — так будет проще управлять действиями пакета:

			[radon] exclude = tests/*,scrapers/* cc_min = A mi_min = B 		

Эта конфигурация исключает определенные каталоги и устанавливает минимальные пороговые значения для Cyclomatic Complexity and Maintainability Index.

Конечно, это далеко не все фичи, которые будут действительно полезны питонистам. Если у вас есть другие крутые решения — приносите в комментарии.

Похожие статьи