Python RU
13.4K subscribers
871 photos
41 videos
36 files
1.12K links
Все для python разработчиков

админ - @haarrp

@python_job_interview - Python собеседования

@ai_machinelearning_big_data - машинное обучение

@itchannels_telegram - 🔥лучшие ит-каналы

@programming_books_it - it книги

@pythonl

РКН: clck.ru/3Fmy2j
加入频道
SQLAlchemy Основные базовые операции: SELECT-запросы

В этом посте мы обсудим сложные SELECT-запросы, используя как SQLite, так и SQLAlchemy с Python. Наслаждайтесь!

Читать

@pro_python_code
5 приемов Python, которые отличают профессионалов от новичков

В этой статье мы рассмотрим пять подходов senior- и junior-программистов к решению распространенных задач. Все задачи взяты из адвент-календаря. Многие из них повторяются многократно в AoC и в других задачниках по программированию и тестах, с которыми вы можете столкнуться, например, на собеседовании при приеме на работу.

Для понимания разницы между профессионалом и новичком не стоит углубляться в решение всех задач AoC. Остановимся лишь на небольшой их части, позволяющей проиллюстрировать принципиальные отличия senior- от junior-разработчиков.

Читать

@pro_python_code
🖥 Полноценная замена модуля subprocess в Python.

Модуль sh - это полноценная замена модулю Python subprocess (поддержка PyPy3), которая позволяет вызывать любую программу терминала так, как если бы она была функцией. Этот модуль представляет собой обертку над терминалом.

$> pip install sh

>>> from sh import ifconfig
>>> net_docker = ifconfig('docker0'))

или

>>> import sh
>>> net_docker = sh.ifconfig('docker0')

>>> net_docker
# docker0: flags=4099<UP,BROADCAST,MULTICAST> mtu 1500
# inet 172.17.0.1 netmask 255.255.0.0 broadcast 172.17.255.255
# ether 02:42:be:1e:35:41 txqueuelen 0 (Ethernet)
# RX packets 0 bytes 0 (0.0
😎
# RX errors 0 dropped 0 overruns 0 frame 0
# TX packets 0 bytes 0 (0.0
😎
# TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0

Обратите внимание, что это не функции Python, это запуск бинарных команд терминала, установленных в системе путем динамического разрешения вашего $PATH, как это делает bash, а затем происходит обертывание бинарного файла в функцию. Таким образом, все установленные в систему Linux программы терминала легко доступны из кода Python.

Установка модуля sh в виртуальное окружение:
# создаем виртуальное окружение, если нет
$ python3 -m venv .venv --prompt VirtualEnv
# активируем виртуальное окружение
$ source .venv/bin/activate
# ставим модуль sh
(VirtualEnv):~$ python -m pip install -U sh


Github

@pro_python_code
Please open Telegram to view this post
VIEW IN TELEGRAM
Шпаргалка_по_Expected_Conditions_в_Selenium.pdf
5.4 MB
🔥 Полезная шпаргалка для начинающих автоматизаторов браузеров по EC (Expected Conditions) в Selenium+Python

@pro_python_code
«Ядро планеты Python»: большой интерактивный учебник по Python, который дополняет сообщество

Учебник охватывает основные темы Python, но коротко и достаточно ёмко, чтобы раскрыть специфику, удобство, красоту и силу этого языка.

Всё с кучей примеров и небольшими дорожными картами по каждой теме, а последнее изменение — меньше недели назад: https://github.com/amaargiru/pycore

#python
🖥 11 бесплатных курсов по Python

1. Автоматизация тестирования с помощью Selenium и Python - Stepik (INT)

2. Добрый, добрый Python - обучающий курс от Сергея Балакирева - Сергей Балакирев (Stepik) (BEG)

3. Основы программирования на Python - Coursera (BEG)

4. Питонтьютор: Бесплатный курс по программированию с нуля - Виталий Павленко, Владимир Соломатин, Д. П. Кириенко, команда Pythontutor (BEG)

5. "Поколение Python": курс для начинающих - Тимур Гуев, Руслан Чаниев, Анри Табуев (Stepik) (BEG)

6. "Поколение Python": курс для продвинутых - Тимур Гуев, Руслан Чаниев, Благотворительный фонд "Айкью Опшн" (Stepik) (INT)

7. Программирование на Python - Тимофей Бондарев, Павел Федотов (Stepik) (BEG)

8. Python: быстрый старт - Дмитрий Фёдоров (BEG)

9. Python для начинающих (BEG)

10. Python для тех, у кого лапки - Мария Чакчурина, Дмитрий Колосов (Stepik) (INT)

11. Python: основы и применение - Константин Зайцев, Антон Гардер (Stepik) (INT)

@pro_python_code
Please open Telegram to view this post
VIEW IN TELEGRAM
🖥 Полезный совет: Проверяйте код с использованием линтера

Линтер анализирует код и ищет в нём ошибки, которые можно обнаружить автоматически. Перед отправкой изменений в репозиторий код всегда полезно проверять с помощью линтера.

Различные IDE и редакторы кода, вроде pycharm и VS Code, содержат встроенные линтеры и подсвечивают проблемные участки кода. Программист сам принимает решение о том, следовать этим рекомендациям или нет. Поначалу сообщения об ошибках, выдаваемые линтерами, могут показаться непонятными. Для того чтобы в них ориентироваться, стоит уделить некоторое время изучению используемого линтера. Это себя окупит.

Если говорить о линтерах, представленных инструментами командной строки, то в этой сфере я порекомендовал бы flake8. Этот линтер обладает разумными настройками, применяемыми по умолчанию. Обычно ошибки, о которых он сообщает, стоит исправлять. Если вы хотите строже относиться к своему коду — взгляните на pylint. Этот линтер способен выявлять множество ошибок, в число которых входят и те, о которых мы тут не говорим.

▍Примеры

Файл, который нужно почистить

В нижеприведённом коде (файл ping.py) можно увидеть некоторые проблемы и без применения линтера.

import requests
import os

def PingExample():
result = requests.get("https://example.com/ping")


Давайте проанализируем его с помощью flake8 и pylint.

Результаты анализа кода с помощью flake8

flake8 ping.py

ping.py:2:1: F401 'os' imported but unused
ping.py:4:1: E302 expected 2 blank lines, found 1
ping.py:5:5: F841 local variable 'result' is assigned to but never used

Результаты анализа кода с помощью pylint

pylint ping.py

************* Module ping
ping.py:1:0: C0114: Missing module docstring (missing-module-docstring)
ping.py:4:0: C0103: Function name "PingExample" doesn't conform to snake_case naming style (invalid-name)
ping.py:4:0: C0116: Missing function or method docstring (missing-function-docstring)
ping.py:5:4: W0612: Unused variable 'result' (unused-variable)
ping.py:2:0: W0611: Unused import os (unused-import)
ping.py:2:0: C0411: standard import "import os" should be placed before "import requests" (wrong-import-order)

--------------------------------------------------------------------
Your code has been rated at -5.00/10 (previous run: -5.00/10, +0.00)


@pro_python_code
Please open Telegram to view this post
VIEW IN TELEGRAM
🖥 Если вы используете сторонние библиотеки — добавьте в репозиторий файл requirements.txt

Если в проекте используются сторонние зависимости, об этом нужно сообщить. Легче всего это сделать, создав файл requirements.txt в корневой директории проекта. В каждой строке этого файла приводятся сведения об одной зависимости. Нужно, кроме того, добавить инструкции по работе с этим файлом в README. Подробности о requirements.txt можно найти в руководстве пользователя по pip.

▍Примеры

Файл requirements.txt для Flask-приложения

Добавление файла requirements.txt в корневую директорию проекта — это самый лёгкий способ отслеживания зависимостей. Можно, помимо сведений о самих зависимостях, дать сведения и об их версиях. Вот пример файла requirements.txt:

gunicorn
Flask>=1.1
Flask-SQLAlchemy
psycopg2


Указание более подробных сведений о зависимостях с использованием файла requirements.in

При работе над любым проектом всегда полезно иметь возможность воспроизведения его окружения. В результате, даже если вышла новая версия какой-нибудь библиотеки, можно использовать старую, проверенную в деле версию, работая с ней до тех пор, пока не будет решено перейти на новую. Это называется «фиксацией зависимостей». Легче всего это можно сделать, прибегнув к pip-tools. При таком подходе в вашем распоряжении окажется два файла: requirements.in и requirements.txt. Второй из них при этом вручную не модифицируют, просто добавляя его в репозиторий вместе с requirements.in. Вот как выглядит файл requirements.in:

gunicorn
Flask>=1.1
Flask-SQLAlchemy
psycopg2


Для того чтобы на основе этого файла был бы автоматически создан requirements.txt, файл requirements.in компилируют, используя команду pip-compile. Вот как выглядит автоматически сгенерированный файл requirements.txt:

#
# This file is autogenerated by pip-compile
# To update, run:
#
# pip-compile
#
click==7.1.2 # via flask
flask-sqlalchemy==2.4.4 # via -r requirements.in
flask==1.1.2 # via -r requirements.in, flask-sqlalchemy
gunicorn==20.0.4 # via -r requirements.in
itsdangerous==1.1.0 # via flask
jinja2==2.11.2 # via flask
markupsafe==1.1.1 # via jinja2
psycopg2==2.8.6 # via -r requirements.in
sqlalchemy==1.3.19 # via flask-sqlalchemy
werkzeug==1.0.1 # via flask

# The following packages are considered to be unsafe in a requirements file:
# setuptools

Как видите, готовый файл содержит сведения о точных версиях всех зависимостей.

@pro_python_code
Please open Telegram to view this post
VIEW IN TELEGRAM
🔍 Python: Создание сканера портов

В этом уроке я проведу вас через процесс создания простого сканера портов с помощью Python.

Читать

@pro_python_code
📌 Poetry

Poetry  —  это удобный инструмент для управления версиями и зависимостями Python. С его помощью легко контролировать и корректировать версии, а также централизованно управлять зависимостями. Из всех способов сделать это рекомендую poetry.

Теперь кратко о том, как использовать этот инструмент.


Основой управления зависимостями в poetry является файл pyproject.toml. В нашем проекте он начинается следующим образом:

[tool.poetry]
name = "Sample Python Project"
version = "0.1.0"
description = "Sample Python repository"
authors = ["hermanmichaels <[email protected]>"]

[tool.poetry.dependencies]
python = "3.10"
matplotlib = "3.5.1"
mypy = "0.910"
numpy = "1.22.3"
pytest = "7.1.2"
black = "22.3.0"
flake8 = "4.0.1"
isort = "^5.10.1"


Как видите, заголовок определяет и раскрывает основные свойства проекта. За ним следует абзац, определяющий необходимые зависимости.

Нужно просто выполнить poetry install в терминале, и poetry автоматически создаст среду Python со всеми установленными зависимостями. Затем можно войти в него через poetry shell.

После добавления новой зависимости нужно запустить poetry update. Это создаст или обновит файл poetry.lock, который можно представить как двоичное представление вышеуказанных зависимостей. Его также нужно будет добавить в репозиторий, и описанный выше процесс установки требований использует этот файл.

@pro_python_code