Перейти до вмісту

Python в Elide

Запускайте Python 3.13 в Elide з аргументами CPython: встановлення компонента Python, вбудована стандартна бібліотека, взаємодія з JavaScript і відомі обмеження.

На цій сторінці

Підтримка Python у версії 1.6.0 експериментальна.

CPython встановлювати не потрібно

Elide сам виконує Python 3.13 і його стандартну бібліотеку.

Додайте необов’язковий компонент Python:

elide setup python

--channel=release або --channel=nightly вибирає канал; --force перевстановлює компонент. Під час встановлення через apt і RPM його додати не можна; див. Встановлення. Без компонента команди Python виводять Python support is not installed. Run 'elide setup python' to add it. і завершуються з кодом 2.

Запуск Python

elide python приймає ті самі аргументи, що й python:

elide python app.py --name Elide --count 2   # sys.argv: ['app.py', '--name', 'Elide', '--count', '2']
elide python -c 'import sys; print(sys.version)'
elide python -m json.tool input.json
echo 'print("from stdin")' | elide python -

Аргументи після скрипта, -c CMD або -m MODULE передаються програмі. elide python без аргументів запускає REPL у терміналі, а в інших випадках читає стандартний ввід.

0:09 / 0:09

Загальні команди запускають файли .py з тим самим sys.argv:

elide app.py
elide run app.py
elide -l python -s 'print(1 + 1)'

Параметри інтерпретатора

Вказуйте їх перед скриптом, -c або -m. elide --help-all перелічує їх у розділі “Python interpreter options”.

ПрапорецьДія
-c CMDВиконати CMD як програму; наступні аргументи потрапляють у sys.argv[1:].
-m MODULEЗапустити модуль бібліотеки як __main__.
-sНе додавати користувацький каталог site до sys.path.
-IІзольований режим.
-EІгнорувати змінні оточення PYTHON*.
-SНе виконувати import site під час запуску.
-PНе додавати на початок sys.path потенційно небезпечний шлях.
-BНе записувати файли байт-коду.
-uНебуферизовані стандартний вивід і потік помилок.
-OРівень оптимізації; повторіть для -OO.
-bПопереджати під час порівняння bytes/str; повторіть, щоб викидати помилки.
-W ARGКерування попередженнями; можна повторювати.
-xПриймається для сумісності; ні на що не впливає.

Два прапорці ввімкнено за замовчуванням: -S, бо Elide сам формує sys.path і пропускає site заради швидкості запуску, і -B. sys.flags повідомляє про обидва. Щоб імпортувати site (файли .pth, sitecustomize), передайте -X polyglot.python.NoSiteFlag=false; щоб записувати байт-код, передайте -X polyglot.python.DontWriteBytecodeFlag=false.

Стандартна бібліотека

Стандартна бібліотека містить json, pathlib, sqlite3, ssl, zlib і ctypes. Для bz2 і lzma не потрібні системні libbz2 і liblzma. Про драйвери баз даних, що входять до Elide, див. Бази даних.

Взаємодія з JavaScript

З прапорцем --interop Python виконує JavaScript через вбудований модуль elide:

# sum.py
from elide import js

print(js("[1, 2, 3].reduce((a, b) => a + b, 0)"))
elide --interop python sum.py

JavaScript і TypeScript імпортують експорт за замовчуванням модуля Python:

// main.mjs
import mod from "./mod.py";
console.log(mod.hello());
elide --interop run main.mjs

Без --interop ці виклики завершуються помилкою. Див. Мови та взаємодія.

Сторонні пакети

Elide не встановлює пакети з PyPI: elide install пропускає dependencies.pypi, а elide install --ecosystems=pypi завершується з кодом 2. Щоб завантажувати пакети з віртуального середовища Python 3.13, задайте VIRTUAL_ENV:

export VIRTUAL_ENV=/path/to/venv
elide python app.py

Elide читає каталог lib/python3.13/site-packages цього середовища.

Див. Пакети та віртуальні середовища; про unittest і pytest див. Тести Python.

Трасування та метрики

API opentelemetry і logging експортують трасування, метрики та журнали через Elide без встановлення SDK; див. OpenTelemetry у Python.

Відомі обмеження

  • Розширення на C: деякі модулі розширень на C не завантажуються.
  • macOS: ізоляція нативних модулів недоступна.
  • SIMD у WebAssembly: встановлення Python його вимикає; див. WebAssembly в Elide.
  • Відмінності від CPython: деякі граничні випадки поводяться інакше, ніж у CPython 3.13; див. Матриця сумісності.

Приклади

Чи була ця сторінка корисною?