Наши продукты

Все выпуски в PDF →
  • Годовая подписка на Xakep.ru

    Все статьи, PDF-архив, скидки и другие бонусы

    6000₽ в год

    Подписаться
  • Ежеквартальный «Хакер» #4

    Печатный выпуск за август–ноябрь 2026 года

    2000₽

    Заказать
  • Ежеквартальный «Хакер» #3

    Печатный выпуск за май–июль 2026 года

    2000₽

    Заказать
  • Спецвыпуск «Хакера» #4

    Избранные материалы 2021–2022 годов на бумаге

    2000₽

    Заказать
Как дума­ешь, мож­но ли пря­мо в ран­тай­ме уста­новить пакет Python и вос­поль­зовать­ся им? Меня этот воп­рос заин­тересо­вал, так как он потен­циаль­но свя­зан с обхо­дом детек­та вре­донос­ного кода. Как ока­залось, мож­но! На осно­ве сво­их экспе­римен­тов я соз­дал инс­тру­мент instld, о котором сей­час рас­ска­жу.
 

Первая доза бесплатно

Итак, instld, как и положе­но при­лич­ному модулю для Python, ста­вит­ся одной коман­дой:

pip install instld

Те­перь пишем instld в кон­соли и видим приг­лашение к вво­ду тек­ста.

`$ instld`
`⚡ INSTLD REPL based on`
`Python 3.11.9 (v3.11.9:de54cf5be3, Apr  2 2024, 07:12:50) [Clang 13.0.0 (clang-1300.0.29.30)] on darwin`
`Type "help", "copyright", "credits" or "license" for more information.`

`>>>`

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

`>>> 5 + 5`
`10`
`>>> import sys`
`>>> sys.version`
`'3.11.9 (v3.11.9:de54cf5be3, Apr  2 2024, 07:12:50) [Clang 13.0.0 (clang-1300.0.29.30)]'`
`>>> print("it's", 'just', 'a', 'REPL')`
`it's just a REPL`
`>>>`

Ну да, обыч­ный REPL. А теперь давай импорти­руем какой‑нибудь пакет, который у тебя еще не уста­нов­лен.

`>>> import pandas as pd`
`Collecting pandas`
`  Downloading pandas-2.2.3-cp311-cp311-macosx_11_0_arm64.whl.metadata (89 kB)`
`     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 89.9/89.9 kB 143.4 kB/s eta 0:00:00`
`Collecting numpy>=1.23.2 (from pandas)`
`  Using cached numpy-2.1.1-cp311-cp311-macosx_14_0_arm64.whl.metadata (60 kB)`
`Collecting python-dateutil>=2.8.2 (from pandas)`
`  Using cached python_dateutil-2.9.0.post0-py2.py3-none-any.whl.metadata (8.4 kB)`
`Collecting pytz>=2020.1 (from pandas)`
`  Downloading pytz-2024.2-py2.py3-none-any.whl.metadata (22 kB)`
`Collecting tzdata>=2022.7 (from pandas)`
`  Downloading tzdata-2024.2-py2.py3-none-any.whl.metadata (1.4 kB)`
`Collecting six>=1.5 (from python-dateutil>=2.8.2->pandas)`
`  Using cached six-1.16.0-py2.py3-none-any.whl.metadata (1.8 kB)`
`Downloading pandas-2.2.3-cp311-cp311-macosx_11_0_arm64.whl (11.3 MB)`
`   ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 11.3/11.3 MB 153.5 kB/s eta 0:00:00`
`Using cached numpy-2.1.1-cp311-cp311-macosx_14_0_arm64.whl (5.4 MB)`
`Using cached python_dateutil-2.9.0.post0-py2.py3-none-any.whl (229 kB)`
`Downloading pytz-2024.2-py2.py3-none-any.whl (508 kB)`
`   ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 508.0/508.0 kB 80.8 kB/s eta 0:00:00`
`Downloading tzdata-2024.2-py2.py3-none-any.whl (346 kB)`
`   ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 346.6/346.6 kB 178.2 kB/s eta 0:00:00`
`Using cached six-1.16.0-py2.py3-none-any.whl (11 kB)`
`Installing collected packages: pytz, tzdata, six, numpy, python-dateutil, pandas`
`Successfully installed numpy-2.1.1 pandas-2.2.3 python-dateutil-2.9.0.post0 pytz-2024.2 six-1.16.0 tzdata-2024.2`

`[notice] A new release of pip is available: 24.0 -> 24.2`
`[notice] To update, run: python3.11 -m pip install --upgrade pip`
`>>> pd.DataFrame({'lol': [1, 2, 3], 'kek': [4, 5, 6]})`
`   lol  kek`
`0    1    4`
`1    2    5`
`2    3    6`
`>>> pd.__version__`
`'2.2.3'`
`>>>`

Как видишь, pandas ска­чал­ся и импорти­ровал­ся пря­мо на лету. Он под­клю­чен и работа­ет.

Те­перь поп­робу­ем запус­тить неболь­шой скрипт через instld. Соз­дадим файл script.py, который будет что‑нибудь делать. Для прос­тоты сно­ва исполь­зуем при­мер с pandas:

import pandas as pd
print(pd.DataFrame({'lol': [1, 2, 3], 'kek': [4, 5, 6]}))

За­пус­каем:

`$ instld script.py`
`...`
`   lol  kek`
`0    1    4`
`1    2    5`
`2    3    6`

И сно­ва работа­ет.

Под конец еще нем­ного магии:

pip list | grep pandas

Пус­то! То есть мы импорти­рова­ли pandas пря­мо из сети, поиг­рали с ним, а ког­да закон­чили, никако­го мусора не оста­лось. Безот­ходное про­изводс­тво!

 

Кое-что потяжелее

Фо­кусы, которые я показал, любопыт­ны и могут быть полез­ны в опре­делен­ных усло­виях, но у нас тут жур­нал «Хакер», а не клуб любите­лей потере­бить питона. Давай сде­лаем кое‑что хакер­ское. Что‑то, что сде­лает уяз­вимой всю эко­сис­тему пакетов Python...

Продолжение доступно только участникам

Вариант 1. Присоединись к сообществу «Xakep.ru», чтобы читать все материалы на сайте

Членство в сообществе в течение указанного срока откроет тебе доступ ко ВСЕМ материалам «Хакера», позволит скачивать выпуски в PDF, отключит рекламу на сайте и увеличит личную накопительную скидку! Подробнее

Вариант 2. Оформи подписку на материалы по тегу

Если тебе интересна эта тема целиком, можно открыть доступ не к одному материалу, а ко всем платным статьям выбранного тега.

«Хакер Старт»

от 1000 р.

Тег: #Xakep Start

Купить подписку

Вариант 3. Открой один материал

Заинтересовала статья, но нет возможности стать членом клуба «Xakep.ru»? Тогда этот вариант для тебя! Обрати внимание: этот способ подходит только для статей, опубликованных более двух месяцев назад.


  • Подпишись на наc в Telegram!

    Только важные новости и лучшие статьи

    Подписаться

  • Подписаться
    Уведомить о
    0 комментариев
    Старые
    Новые Популярные
    Межтекстовые Отзывы
    Посмотреть все комментарии