Pull to refresh

Открытый вебинар «The Python Packaging»

Reading time 1 min
Views 1.4K
Python *C++ *Conferences

"The Python packaging has a reputation of a somewhat black box from the early days. There are many unknown parts, and people mostly get by with just copying other projects, build configurations, and roll with them.” (c) Bernat Gabor - the maintainer of both the virtualenv and tox project, occasionally contributing to both setuptools and pip.

Попытаемся исправить эту ситуацию и разобраться, как устроено построение пакетов в питоне (а точнее, как оно было устроено раньше и как предлагается делать сейчас). А также, рассмотрим более сложный случай - построение пакетов с нативными модулями (С++/CUDA).

Технические вебинары компании Xperience AI проходят регулярно в свободном доступе. Чтобы получить приглашение на доклад Григория Серебрякова, а также получать приглашения на будущие выступления, оставьте свой адрес здесь. Часть лекций появляется на youtube-канале Xperience AI.

Читать далее
Total votes 3: ↑3 and ↓0 +3
Comments 0

Хабраподсветка или эксперименты в изолированном окружении Python

Reading time 4 min
Views 4.9K
Python *
Протестировать свежую версию любимого фреймоврка. Запустить приложение со специфичным набором библиотек. Установить необходимые библиотеки по списку зависимостей. Как решить все эти задачи не затронув системные файлы? В этой статье речь пойдет об утилитах virutalenv и pip.
Читать дальше →
Total votes 30: ↑28 and ↓2 +26
Comments 11

Python-пакеты и их использование

Reading time 3 min
Views 25K
Python *

Всем добрый день!


На Хабре уже поднималась тема организации работы с внешними пакетами с использованием подмодулей или деревьев в Git. Это показалось хорошим решением, но на деле вылилось в неудобства и запутанность. Тогда я решил перенести всё на python-пакеты. Чем и поделюсь сейчас на примере Django приложения.


Читать дальше →
Total votes 33: ↑24 and ↓9 +15
Comments 14

Выкладка python-проектов с помощью pip и wheel

Reading time 4 min
Views 7.6K
Website development *Python *
Sandbox
Привет, Хабрахабр!

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

image

Читать дальше →
Total votes 29: ↑28 and ↓1 +27
Comments 20

Почему я ненавижу virtualenv и pip

Reading time 9 min
Views 99K
Python *
Translation
Я не разделяю всеобщей любви к virtualenv (далее — venv) и pip. Я считаю, что они лишь вносят неразбериху и более того — вредят. Python-программисты чаще всего не соглашаются со мной, да и venv+pip де-факто считается стандартом в python-сообществе. Так как я понимаю, насколько голословными звучат мои высказывания, решил написать сей трактат. Конечно, я иногда пускаюсь спорить на эту тему и в реальной жизни: и ну нравится мне заводить людей и наблюдать, как страстно они остаивают свою позицию. Но при этом мне всегда кажется, что словесно я не могу обосновать свою позицию в полной мере. Поэтому вместо того, чтобы постоянно пытаться вербально доказывать свою точку зрения, я решил написать эту статью, дабы потом просто показывать её людям. Может быть тогда некоторые со мной согласятся, потому что сейчас не согласен почти никто. А может наоборот, как только мои доводы будут всецело поняты, найдутся те, кто их аргументированно опровергнет. Так или иначе, я буду рад любому варианту развития событий.
Читать дальше →
Total votes 86: ↑68 and ↓18 +50
Comments 61

Python на колёсах

Reading time 7 min
Views 113K
Python *Programming *
Tutorial
Translation
Инфраструктура системы пакетов для Python долго подвергалась критике как от разработчиков, так и от системных администраторов. Долгое время даже само комьюнити не могло прийти к соглашению, какие именно инструменты использовать в каждом конкретном случае. Уже существуют distutils, setuptools, distribute, distutils2 в качестве базовых механизмов распространения и virtualenv, buildout, easy_install и pip в качестве высокоуровневых инструментов управления всем этим беспорядком.

До setuptools основным форматом распространения были исходные файлы или некоторые бинарные MSI-дистрибутивы для Windows. Под Linux были изначально сломанный bdist_dumb и bdist_rpm, который работал только на системах, основанных на Red Hat. Но даже bdist_rpm работал недостаточно хорошо для того, чтобы люди начали его использовать.

Несколько лет назад PJE попытался исправить эту проблему, предоставив смесь из setuptools и pkg_resources для улучшения distutils и добавления метаданных в Python-пакеты. В дополнение к этому он написал утилиту easy_install для их установки. По причине отсутствия формата распространения, поддерживающего метаданные, был предоставлен формат 'яиц' [egg].

Python eggs – обычные zip-архивы, содержащие python-пакет и необходимые метаданные. Хотя многие люди, вероятно, никогда намеренно не собирали egg'и, их формат метаданных до сих пор жив-здоров. И все разворачивают свои проекты с использованием setuptools.

К сожалению, некоторое время спустя сообщество разделилось, и часть его провозгласила смерть бинарных форматов и 'яиц' в частности. После этого pip, замена easy_install, перестал принимать egg-формат.

Потом прошло еще немного времени, и отказ от бинарных пакетов стал доставлять неудобства. Люди всё больше и больше стали деплоить на облачные сервера, а необходимость перекомпиляции C-шных библиотек на каждой машине не слишком радует. Так как 'яйца' на тот момент были малопонятны (я так полагаю), их переделали в новых PEP-ах, и назвали 'колёсами' [wheels].
Читать дальше →
Total votes 44: ↑40 and ↓4 +36
Comments 38

Про колеса

Reading time 2 min
Views 15K
Python *
Tutorial
Многие уже слышали про колеса / wheels; рассказывать про них подробно не буду — на хабре были хорошие статьи. Опишу пошагово один (очевидный) способ использования колес на машине разработчика.

Все, кто устанавливал пакеты вроде numpy или scipy через pip знают, что это долго: компиляция может и десять минут занять, и двадцать, и тридцать. Среду для компиляции-то можно настроить (ну по крайней мере под mac и linux это не так сложно), но устанавливать такие зависимости в каждый virtualenv — то еще удовольствие. Можно, конечно, чай попить. Или виртуаленвы не использовать / использовать один общий.
Читать дальше →
Total votes 29: ↑27 and ↓2 +25
Comments 5

Знакомство с XACML — стандартом для Attribute-Based Access Control

Reading time 26 min
Views 58K
CUSTIS corporate blog Information Security *Website development *
В предыдущей статье мы рассказывали о том, что такое Attribute-Based Access Control и в чем его преимущества по сравнению с наиболее распространенным на сегодняшний день Role-Based Access Control. Пришло время рассмотреть ABAC более детально, через существующий стандарт под названием XACML.

Стандарт переживает уже третью и, скорее всего, не последнюю редакцию, история его ведет свой отсчет с 2003 года. Курирует и поддерживает стандарт организация OASIS. Этот стандарт описывает необходимые компоненты системы, их назначение, способ их взаимодействия и использования. По сути, он охватывает все, что нужно, до мелочей.

В данной статье будут рассматриваться способ выражения бизнес-правил в виде политик безопасности, основные компоненты системы безопасности, ее интеграция и другие моменты, стандартом не затрагиваемые, но не менее важные и интересные. Приглашаю всех читателей познакомиться с этими вопросами подробнее. Также приветствуются любые замечания, комментарии, вопросы и критика.
Читать дальше →
Total votes 19: ↑17 and ↓2 +15
Comments 6

«pip -t» — простая альтернатива virtualenv

Reading time 4 min
Views 18K
Website development *Python *
Translation

TL;DR


Чтобы просто установить и изолировать зависимости проекта, virtualenv часто оказывается слишком тяжелым решением. Предлагаем простую альтернативу:
  1. добавить ./.pip в переменную окружения PYTHONPATH,
  2. установить пакеты локально с помощью pip install -t .pip,
  3. запускать python из папки проекта.

Читать дальше →
Total votes 30: ↑27 and ↓3 +24
Comments 12

Разработка скриптов-обёрток с помощью инструмента Sparrow

Reading time 5 min
Views 4.4K
Perl *Open source *Python *Development for Linux *
Tutorial

Доброе время суток! В данном посте я хочу рассказать как с помощью инструмента Sparrow лёгко и просто писать собственные обёртки к существующим скриптам и утилитам, а так же зачем вам это может понадобиться.

Читать дальше →
Total votes 12: ↑10 and ↓2 +8
Comments 3

Так ли мал Alpine 3.8 Docker для Python 3 runtime

Reading time 8 min
Views 29K
Python *Development for Linux *DevOps *
Совсем недавно произошёл релиз минималистичного Alpine Linux 3.8. Очень часто данный linux образ используют в докере, собирая очень компактные окружения для runtime.

Сегодняшняя статья будет рассмотрена в срезе использования runtime системы в докере для Python 3.6.X версий, с различным составом пакетов pip. А так же мы соберём самый новый Python 3.7 в Alpine.

В конце статьи будет представлен размер образа image, занимаемый на диске, в зависимости от состава пакетов pip и произведено сравнение между дистрибутивами Alpine 3.8, Debian 9, Fedora 28.
Читать дальше →
Total votes 7: ↑6 and ↓1 +5
Comments 13

Как работают библиотеки виртуального окружения

Reading time 5 min
Views 8.4K
Python *Programming *
Translation
Вы когда-нибудь задумывались о том, как работают библиотеки виртуального окружения в Python? В этой статье я предлагаю ознакомится с главной концепцией, которую используют все библиотеки для окружений, такие как virtualenv, virtualenvwrapper, conda, pipenv.

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

Когда Python запускает интерпретатор, он начинает искать директорию с модулями (site-packages). Поиск начинается с родительской директории относительно физического расположения исполняемого файла интерпретатора (python.exe). Если папка с модулями не найдена, то Python переходит на уровень выше, и делает это до тех пор, пока не будет достигнута корневая директория. Для того, чтобы понять, что это директория с модулями, Python ищет модуль os, который должен лежать в файле os.py и является обязательным для работы питона.
Читать дальше →
Total votes 22: ↑22 and ↓0 +22
Comments 2

Модульные промышленные мониторы Advantech FPM-7002

Reading time 3 min
Views 3.9K
Advantech IIoT corporate blog Periphery


Суровые условия производства накладывают дополнительные требования ко всем периферийным устройствам, в том числе и к мониторам. Промышленные мониторы серии FPM-7002 предназначены для установки во встраиваемые системы с повышенными требованиями надежности, имеют модульную структуру, позволяющую сконфигурировать любые порты видеовходов, поддерживают установку модулей NFC и Wi-Fi.

В статье разберем особенности промышленных мониторов и дополнительные функции, позволяющие подключать мониторы на расстояниях до 400 метров, а также последовательно соединять до 4 мониторов.

Читать дальше →
Total votes 20: ↑18 and ↓2 +16
Comments 13

Мелкая питонячая радость #3: Poetry

Reading time 2 min
Views 34K
Python *


Управление зависимостями? Шо, опять?


Экосистема Python породила целую пачку способов управления зависимостями в проектах.
Прямо сейчас можно выбирать между setup.py, requirements.txt, setup.cfg, MANIFEST.in и Pipfile.
Но французского питониста Sébastien Eustace все эти способы не устроили, и он написал свою штуку для менеджмента питонячих пакетов — Poetry. Зачем он это сделал? Чтобы заменить все эти setup.py, requirements.txt, setup.cfg, MANIFEST.in и Pipfile чем-то простым и понятным. Плюс добавить кое-что полезное сверху.

Читать дальше →
Total votes 24: ↑22 and ↓2 +20
Comments 12

Зачем использовать python -m pip

Reading time 6 min
Views 25K
OTUS corporate blog Python *Programming *
Translation
И снова здравствуйте. В преддверии старта нового потока по курсу «Machine Learning», хотим поделиться переводом статьи, которая имеет довольно косвенное отношение к ML, но наверняка будет полезна подписчикам нашего блога.





Мариатта — разработчик из Канады, спросила в Твиттере о python -m pip, попросив рассказать об этой идиоме и объяснить принцип ее работы.

Недавно я узнала, что нужно писать python -m pip вместо обычного pip install, но теперь я не могу вспомнить от кого я это услышала. Наверное, от @brettsky или @zooba. У кого-нибудь из вас есть пост в блоге, чтобы я могла поделиться им с читателями?
— Мариатта (@mariatta) 29 октября 2019 г. (https://twitter.com/mariatta/status/1189243515739561985?ref_src=twsrc%5Etfw)



Я не уверен, что именно я сказал Мариатте о python -m pip, но есть все шансы, что это был именно я, поскольку я же просил, чтобы эта инструкция для установки пакетов с помощью PyPI писалась именно так с 2016 года. Итак, эта статья должна пояснить, что такое python -m pip и почему вы должны использовать именно ее при запуске pip.
Читать дальше →
Total votes 41: ↑28 and ↓13 +15
Comments 19

А как вам такой вариант управления зависимостями в Python?

Reading time 7 min
Views 7.8K
Python *

Недавно я решил, что пора наконец-то разобраться в теме управления зависимостями в моих Python проектах и начал искать решение, которое бы меня полностью устроивало. Я поэкспериментировал с pipenv, проштудировал документацию к poetry, почитал другие статьи по теме. К сожалению, идеального решения я так и не нашел. В результате, я изобрел новый велосипед свой подход, который и предлагаю обсудить под катом.

Читать дальше →
Total votes 12: ↑8 and ↓4 +4
Comments 8

Обходим запрет messages API Вконтакте через Python

Reading time 6 min
Views 13K
Python *Programming *VK API *Social networks and communities
Привет, Хабр. В своей предыдущей статье я рассказал о возможности доступа к методам раздела messages через документацию, для чего достаточно было лишь авторизоваться на сайте ВК. Многие тогда заявили, что это не является угрозой личным данным пользователей, а невозможность выкачать свои сообщения — недостаток платформы. Также в комментариях мне оставили ссылку на node.js библиотеку, которая может авторизовываться по логину/паролю и предоставлять доступ к API сообщений, притворяясь официальным приложением.

Дисклеймер:


Статья и весь написанный код создавались только в образовательных и исследовательских целях и никогда не использовались для незаконной деятельности. Автор не призывает вас повторять какие либо описанные здесь действия и не несёт за них никакой ответственности.


Но не все люди знакомы c javascript и node.js, поэтому я и решил написать свою библиотеку на python, которым сейчас пользуются многие, позволяющую через «тестовые запросы» документации предоставить полный функционал messages API. Сразу прошу не злиться на меня в местах, где я буду повторять аспекты прошлого «выступления», потому что я хочу оформить эту статью в виде независимой документации.
Читать дальше →
Total votes 10: ↑9 and ↓1 +8
Comments 12

Создание виртуальных окружений и установка библиотек для Python 3 в IDE PyCharm

Reading time 8 min
Views 263K
Python *Programming *
Sandbox

Язык программирования Python считается достаточно простым. На нем легче и быстрее пишутся программы, по сравнению с компилируемыми языками программирования. Для Python существует множество библиотек, позволяющих решать практически любые задачи. Есть, конечно, и минусы и другие нюансы, но это отдельная тема.


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


Статья начинается с базовых вещей: с установки Python 3, инструментов разработки Pip и Virtualenv и среды разработки PyCharm в Windows и в Ubuntu. Для многих это не представляет трудностей и возможно, что уже всё установлено.


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

Читать дальше →
Total votes 13: ↑11 and ↓2 +9
Comments 20
1