Выбирайте путь Python, если в целевой среде есть Python 3.11 или новее и полезно получить читаемый созданный продукт. Python остаётся целью сборки, а его конструкции не становятся синтаксисом Топаза.
Предварительные требования
- Завершите пакет
study-planиз раздела Первое приложение. - Храните вместе
topaz.toml,topaz.lock,src/plan.tpz,src/main.tpzи выбранный тест. - Установите в целевой среде Python 3.11 или новее.
- Выполняйте следующие команды из каталога
study-plan.
Во время исполнения продукту не нужны компилятор Топаза или файлы .tpz.
Однако он включает созданный исходный код Python и вспомогательный модуль,
поэтому не является платформенным исполняемым файлом.
Общий проверяемый пакет
На странице Rust используются те же два модуля Топаза. Сначала
src/plan.tpz:
export record УчебнаяЗадача {
название: string,
минуты: int,
выполнена: bool = false,
}
function разобратьМинуты(текст: string) -> Result<int, string> {
match toInt(текст) {
case Some(значение) if значение > 0 => Ok(значение)
case _ => Err("minutes must be a positive integer")
}
}
export function создатьЗадачу(
название: string,
текстМинут: string,
выполнена: bool = false,
) -> Result<УчебнаяЗадача, string> {
let минуты = разобратьМинуты(текстМинут)?
Ok(УчебнаяЗадача { название: название, минуты: минуты, выполнена: выполнена })
}
export function подвестиИтог(задачи: Array<УчебнаяЗадача>) -> string {
let mut осталось = 0
for задача in задачи {
if !задача.выполнена {
осталось = осталось + задача.минуты
}
}
"tasks={задачи.length}, remaining={осталось} minutes"
}Точка входа пакета src/main.tpz:
import src.plan { УчебнаяЗадача, создатьЗадачу, подвестиИтог }
export function main(аргументы: Array<string>, ввод: string) -> Result<int, string> {
let задачи: Array<УчебнаяЗадача> = [
создатьЗадачу("Run first program", "10", true)?,
создатьЗадачу("Build application", "25", false)?,
]
print(подвестиИтог(задачи))
Ok(0)
}Проверьте исходный код Топаза
Проверьте пакет, выполните выбранный тест и зафиксируйте эталонный вывод:
topaz check --root . --locked
topaz test tests/plan.tpz --root . --locked
topaz run --root . --locked
Тест сообщает tests/plan.tpz: test-ok, а запуск выводит:
tasks=2, remaining=25 minutesemit для изучения, build для поставки
Используйте emit, только если нужно изучить или интегрировать созданный
исходный код Python:
topaz emit --target python --root . --locked --out-dir ../dist/python-source
Полный управляемый продукт Python создаётся командой build:
topaz build --target python --root . --locked --out-dir ../dist/python
После сборки запускайте program.py явно. Сборка Python отклоняет --run и
--release: это не параметры продукта Python. Параметр Rust --backend при
сборке Python также недопустим.
Проверьте управляемый продукт
Продукт содержит:
dist/python/
├── GENERATED-OUTPUT-NOTICE.txt
├── LICENSE
├── NOTICE
├── program.py
├── topaz-artifact.json
└── topaz_py_rt.pytopaz-artifact.json записывает цель python, требование Python 3.11 или
новее, команду запуска, размер и SHA-256 каждого управляемого файла. Топаз
записывает манифест последним и отклоняет изменённый файл, небезопасную
коллизию или другую цель в том же каталоге. Поставляйте всё дерево:
program.py и topaz_py_rt.py должны оставаться вместе, а уведомления,
лицензия и манифест входят в управляемый продукт.
Запустите без доступного исходного кода Топаза
Каталог dist находится вне пакета, поэтому переместите исходный пакет и
запустите только продукт:
cd ..
mv study-plan source-unavailable
python3 dist/python/program.py
В Windows используйте Rename-Item study-plan source-unavailable, затем
запустите python dist\python\program.py. Продукт завершается с кодом 0 и
печатает тот же результат.
Восстановление с учётом цели
Генератор Python сообщает о неподдерживаемых операциях стандартной библиотеки с
указанием места в исходном коде до записи артефакта. На этой цели недоступны
Codec.deflateFixedCompress, Codec.zlibFixedCompress и
Codec.reedSolomon255223Protect. Оставьте такую операцию на поддерживаемой
цели или выберите другую реализацию, затем повторите сборку.
Если program.py не может импортировать topaz_py_rt.py, восстановите всё
управляемое дерево, а не копируйте один созданный файл. Если версия Python
слишком стара, установите в целевой среде Python 3.11 или новее.
Точная граница
Созданный Python — заменяемый артефакт поставки, а не стабильный API для
ручного расширения и не платформенный исполняемый файл. Успешный запуск
подтверждает вывод и код завершения этой программы в выбранной среде Python.
Он не открывает произвольные библиотеки, исключения, декораторы или API
пакетов Python для файлов .tpz.
Ограниченный профиль приложения Lispex не является возможностью созданного Python. Пакет, достигающий этой возможности, отклоняется до записи артефакта Python. Выберите интерпретатор или допущенную нативную цель в руководстве по ограниченному приложению. Продолжите с границ интеграции, бэкенда Rust, интерпретатора и бэкендов или артефактов и развёртывания.