Что делать если нужно поставить какую-то Python-библиотеку а root-прав нет? То есть в систему библиотеку никак и ничего не поставить.
Есть как минимум два способа это решить правильно!
🔸 Сделать виртуальное окружение и ставить там что угодно.
Это позволит создать полностью независимое исполняемое окружение для ваших приложений.
Все библиотеки будут храниться в домашней директории юзера а значит доступ на запись имеется.
Создать очень просто:
python3 -m venv ~/venvs/myenvname
Теперь активируем окружение
# Linux
source ~/venvs/myenvname/bin/activate
# Windows
%userprofile%\venvs\myenvname\Scripts\activate.bat
Можно ставить любые библиотеки и запускать приложение.
Это стандартный метод работы с любым проектом. Если еще не используете его, то пора начинать. Даже при наличии root доступа!
🔸 Бывает, что нет возможности запустить приложение из своего виртуального окружения. Например, его запускает какой-то сервис от вашего юзера и вставить активацию окружения вы не можете.
В этом случае можно установить библиотеки для Python не глобально в систему, а только для юзера.
Выполните этот код в консоли:
python3 -m site
Вы получите что-то такое:
sys.path = [
'/home/user',
'/usr/lib/python37.zip',
'/usr/lib/python3.7',
'/usr/lib/python3.7/lib-dynload',
'/home/user/.local/lib/python3.7/site-packages',
...
]
USER_BASE: '/home/user/.local'
USER_SITE: '/home/user/.local/lib/python3.7/site-packages'
ENABLE_USER_SITE: True
Нас интересует параметр USER_SITE. Это путь к пользовательским библиотекам, которые доступны по умолчанию, если они есть.
Именно сюда будут устанавливаться модули если добавить флаг --user при установке чего-либо через pip
pip install --user requests
Для этой команды не нужны root-права.
После неё можно запускать системный интерпретатор без виртуальных окружений и установленная библиотека будет доступна для текущего юзера.
Параметр USER_BASE показывает корневую директорию для хранения user-библиотек. Её можно изменить с помощью переменной окружения PYTHONUSERBASE
export PYTHONUSERBASE=~/pylibs
python3 -m site
...
USER_BASE: '/home/user/pylibs'
USER_SITE: '/home/user/pylibs/lib/python3.7/site-packages'
Получается некоторое подобие виртуального окружения для бедных 😁 которое можно менять через эту переменную (не делайте так!Лучше venv!)
🔸 Дописывание пути в PYTHONPATH
Этот способ не входит в список "двух правильных", но тоже рабочий. Здесь придётся сделать всё несколько сложней.
Сначала ставим библиотеку в любое место указывая путь установки
pip3 install -t ~/mylibs modulename
Библиотека установится без привязки к какому-либо интерпретатору. То есть по умолчанию не будет видна. Теперь в нужный момент добавляем этот путь в sys.path или в PYTHONPATH.
Не буду советовать так делать. Единственный раз когда этот способ мне пригодился и решил поставленную задачу, это при создании общей библиотеки для кластера компьютеров.
Модули лежат в сети и подгружаются для всех из одного и того же места. То есть обновлять файлы требуется только один раз а не на всех хосты отдельно.
Минусы такого подхода:
▫️Нужно всем хостам пробить нужный путь в .bashrc или ещё куда-то чтобы он сетапился на старте.
▫️Чем больше хостов тем больше нагрузка на сеть. Иногда такой способ не подходит именно по этой причине. Тогда Ansible вам в помощь.
▫️Не очень подходит если хосты с разными операционками. Некоторые библиотеки различаются для Linux и Windows (там, где есть бинарники) и приходится мудрить более сложные схемы.
#tricks#basic
💧Airdrop: DEV AI 💧
📣Complete Task: 140DEV (~$20) each person #DEV
📊Referral: ➕70 DEV (~$10) each referral
🏆Winners: All Valid Participants
💎Ratings: ⭐️⭐️⭐️⭐️⭐️
📅End Date: 5 April, 2023
🔛Airdrop Bot For DEV AI 🔛
💠 Join DEV AI Telegram Channel.
💠 Follow DEV AI Twitter and retweet the pinned post.
💠 Submit Polygon Wallet Address
📡Enter your information to the airdrop bot.
🗞Note: All airdrop steps should be completed.
Сделал в компании доклад о применении ИИ в архитектуре, давайте и вам расскажу.
Фокус в использовании подхода architecture as code: абсолютно все архитектурные артефакты у нас это тексты. С обычной документацией понятно, это и так некоторый набор текстовых файлов, чаще всего в макрдауне. Для них мы применяем структурный шаблон Arc42 — список из 12 пунктов, по которым нужно распределить информацию о проектируемой системе.
Структурный шаблон, во-первых, хорошо известен нейронкам, и они сразу понимают, о чём речь. Во-вторых, можно кинуться в модель бизнес-требованиям и очень быстро создать некий первоначальный набросок, от которого вы дальше уже пляшете, уточняя по пунктам и исправляя ошибки ИИ. Ну и, в-третьих, готовая структура с ящиками, по которым нужно всё раскладывать, это гораздо лучше, чем свалка ADR'ок, как это нередко бывает в компаниях.
Со схемами и диаграммами ещё интереснее. Берём инструменты со своими DSL-языками, такие, как Structurizr и PlantUML. Вся схема или диаграмма целиком определяется текстовым файлом. Можно применять Git со всеми его преимуществами. А для нейронок это родная среда: вы, как человек, смотрите на схему глазами, но нейронка работает с её DSL-файлом. Навскидку тут прирост эффективности даже больше, чем в программировании, потому что DSL это просто синтаксис, без смыслового наполнения, человеку его можно вообще не знать. Ты пишешь промпты, а смотришь уже на картинку, сгенерированную схему, и следующим промптом указываешь, где какие правки сделать. Нейронке при этом не приходится думать про потоки, асинхронность, типы данных, она просто правит текст как текст, поскольку у DSL нет поведения.
Тут как раз наиболее видна разница между рутинной и интеллектуальной частью работы. Как именно будет выглядеть схема, продумывает архитектор. Если доверить это нейронке, даже мощной, будет полно ошибок, неоптимальностей, неучтённых нюансов среды и так далее. Но вот само по себе написание синтаксиса — имба.
#dev@clockstackwheels
В 2023 году мы с коллегой сделали доклад на DotNext по DDD и архитектуре систем. И там, в числе прочего, показали, что устройство сложного проекта, спроектированного по определённым правилам, может иметь фрактальную структуру. Но мысль эту особо не развивали.
В 2024 году Влад Хононов — автор одной из самых известных книг по DDD — сделал доклад на DotNext по теме «Фрактальная геометрия в проектировании систем». Разумеется, он никаким образом на нашу идею не опирался, а работал над своей системой уже несколько лет к моменту доклада. У него там прям интересные научные обоснования, более серьёзный теоретический фундамент с введением новых понятий и принципов. Но факт близости хода мысли приятен. Типа, мы с коллегой делали систему, которая показала те же свойства, что и системы крутого эксперта в архитектуре.
Прям рекомендую доклад по второй ссылке всем, кто работает в компаниях, где по какому-то странному недосмотру есть архитектура, борьба с техдолгом и попытки не допустить превращения кода в лапшу с высоким зацеплением.
#dev@clockstackwheels
У протокола Яндекса по умному дому есть регламент, согласно которому Яндекс периодически запрашивает состояние всех устройств одного пользователя в рамках конкретного провайдера, одним запросом. Провайдеры забивают на поддержку этого метода, и возвращают не всегда корректный ответ, из-за чего про некоторые устройства Яндекс начинает думать, что они отвалились.
В такой ситуации Яндекс делает несколько попыток, а затем присылает пользователю уведомление типа «Датчик такой-то долго не отвечает». Фокус в том, что, если нажать на уведомление, открывается карточка этого устройства, которая запрашивает его состояние уже более целенаправленно: не методом получения всех устройств, а методом запроса по конкретному устройству. На эти методы производители не забивают, и карточка успешно обновляется.
Так вот. Какого хрена в Яндексе не догадались пропускать шаг с уведомлением и просто при неполучении состояния пытаться запрашивать его напрямую? Это же прям очень просто в реализации, экономит запросы на уведомления, не отвлекает юзера, делает систему более надёжной.
Не, ладно, я сам работаю в энтерпрайзе, поэтому знаю, что можно годами ждать исправления даже мелкого косяка, потому что так процессы устроены. Но всё-таки, блин. Прям подбешивает меня, и как пользователя, и как программиста. #dev
Объявили результаты. Из четырёх команд мы оказались на четвёртом месте. Сказать, что это стало мягко говоря удивлением — ничего не сказать. Секрет оказался прост: мы пришли четверо разработчиков делать проект на хакатон, который был назван таковым организаторами по ошибке. А оказался конкурсом бизнес-идей. В общей шкале оценки реализация значила всего 20%. Двадцать процентов. Двухдневная работа заняла одну пятую от общей оценки (презентация делалась за пределами основного времени). Зато более половины уделялось умозрительным критериям, не имеющим никакого отношения к собственно работе, проделанной командами на самом хакатоне: например «Прогнозируемый объём аудитории», «Вирусный эффект» (ага, для B2G продукта вирусный эффект). Как в той картинке, где разных животных, включая рыбу, просят залезть на дерево, кто быстрее.
При цене реализации в 20% можно было вообще ничего не кодить два дня, прийти без проекта, но зато удачно придумать и продать комиссии маркетинговую лапшу. Хакатоны нередко ругают за возможность «выиграть одной презентацией», но в такой критике обычно речь идёт об обмане относительно степени готовности прототипа. Здесь же такие условия были с самого начала заложены в систему.
Даже не знаю, как к этому относиться. Ну типа чуваки просто не донесли, что реализация почти ничего не значит, и стараться не нужно. На мой взгляд это противоречит концепции хакатона, тогда уж стоило просто объявить конкурс идей, у него совсем другие правила игры. С другой стороны, участвовать нас никто не заставлял, проект получился прикольный, делать его было интересно. С третьей стороны, одно из самых сокрушительных поражений в моей жизни.
В ноябре будет уже более масштабный внутренний so-called-хакатон в компании. Не понимаю, хочу ли теперь участвовать или нет. #dev
Несколько лет назад на конференции TechTrain я впервые сыграл в Code in the Dark. Два разработчика параллельно садятся за компьютеры, запускается таймер. Дается картинка, которую нужно сверстать в HTML, но важный нюанс: ты не видишь результат до самого конца, пока не отправишь своё решение. Вёрстка вслепую. Если где-то поехало, можешь вообще всё сломать, но не узнаешь об этом. Мне очень понравилось, но я никак не мог придумать, как бы подобное соревнование выглядело для бэкенд-разработчиков.
А тут вот на стенде Контура была версия как раз для бэкендеров: даётся набор данных, отражающий валидные вводы и выводы для неизвестных юнит-тестов, и нужно закодить функцию, которая пройдёт эти тесты.
Сыграл дважды, один раз догадался о принципе, но не смог реализовать (видеть вывод твоей функции нельзя, вслепую я не учёл важный краевой случай), а второй раз решил с небольшой подсказкой от организаторов. В общем, это как задача с литкода уровня Easy, но саму задачу ты не видишь, только правильные кейсы.
Мне понравилось. Нужно на вечеринках с коллегами играть :)
#dev
Выступил на DotNext сегодня, уже второй раз в жизни. Вообще, во времена хайпа ML и нейросетей было любопытно подать доклад, который рассказывает о том, как обойтись БЕЗ нейросетей и сделать всё на привычных алгоритмах. Видимо, не один я устал от ИИ, народу было достаточно, прошло вроде хорошо.
Сходил на четыре других доклада, и, пожалуй, с точки зрения докладов этот год лично для меня один из лучших, потому что два прям очень зашли: увидел то, что хотел по темам, всеобъемлюще, с ответами на возникающие в процессе вопросы. Вообще, нередко авторы боятся показывать совсем азы и тривиальные вещи — возможно, чтобы доклад не казался слишком простым. Но вот мне при введении в любую новую технологию или новый подход часто не хватает как раз основ. Чтоб прям с фундамента разжевали. И тут наконец-то такое было.
А вот со стендами дела похуже, имхо — из известного бигтеха только Озон и Контур. Завтра второй день, пойду подробнее посмотрю, что там. И да, снова сама конференция не предложила никакие тематические наклейки, и непонятно, что клеить на ноутбук :)
#dev
Друг делал уборку у себя и обнаружил мою книжку. Двадцать лет у него хранилась. Именно с неё де-факто началось моё изучение программирования. Первые две части про то, как во флэше рисовать, а вот третья — о программировании на ActionScript 2 (тогда ещё), причем очень подробно, с самых основ.
До сих пор считаю убийство Флэша одним из наиболее деструктивных и вредных для человечества действий компании Apple.
Кстати, изучать программирование на движущихся графических объектах было прям очень вдохновляюще. Ничто не давало такую мотивацию, как созерцание того, как тела летают по экрану согласно заданному тобой принципу.
Еще в комплекте с Флэшем был набор демок, и, запуская каждую из них, я думал "Хочу уметь так делать!". Одна из мечт, которые сбылись полностью.
#dev
Программисты пока могут не бояться ИИ.
В Росатоме работать с ИИ-агентами было нельзя, а вот тут в 2ГИС это даже поощряется, и компания сама оплачивает нужные доступы и лицензии. Практически любые модели на выбор, чаты, Copilot и так далее. Поэтому я попробовал выполнять прям настоящую энтерпрайзную работу при поддержке ИИ, и вот что скажу.
Во всех рекламах нейросеток говорят о том, как вам эта сетка позволит создать программу по текстовому описанию без разработчиков. Пожалуй, если создавать программу с нуля и аккуратно итеративно описывать требования, это может сработать. Только дело в том, что в реальной разработке мало работы по созданию с нуля и много работы по внедрению фич и исправлению ошибок. А для этого ИИ-агенту нужно, кроме умения хорошо кодить, ещё и знать (и понимать!) предметную область.
И тут начинаются проблемы.
Во-первых, в большинстве компаний предметная область нигде целиком не формализована в виде какого-то текста, который можно было бы передать в контекст. Я бы сказал, что единственный более-менее полный документ, описывающий предметную область программы — исходный код этой программы. И хорошо, если она сделана по какому-нибудь DDD, а если там хаотичные процедуры с высоким зацеплением?
Во-вторых, и это более важно, мы используем свои человеческие навыки и опыт жизни в окружающем мире, чтобы правильно понимать предметную область. Нужно именно что пожить в мире, чтобы понимать, как пить из пресловутого перевёрнутого стакана. И пока моделькам не получается передать всё многообразие человеческого опыта, люди в относительной безопасности. Ну, кроме тех, чья работа это просто кодить без обдумывания.
#dev