Как дума­ешь, мож­но ли пря­мо в ран­тай­ме уста­новить пакет 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...

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

Материалы из последних выпусков становятся доступны по отдельности только через два месяца после публикации. Чтобы продолжить чтение, необходимо стать участником сообщества «Xakep.ru».

Присоединяйся к сообществу «Xakep.ru»!

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

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

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

    Подписаться

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