Вы можете использовать pyinstaller, если ваш сценарий написан так, чтобы его можно было запускать как exe.Если вы используете anaconda, то вам просто нужно запустить
pyinstaller --onefile path_to_your_file
, хотя я обычно запускаю что-то подобное, чтобы избежать ошибок, которые я получаю с PyQt5
pyinstaller --onefile --exclude-module PyQt5 --noconsole C:\username\etc\script.py
https://www.pyinstaller.org/
посмотрите на следующее, чтобы заморозить ваш скрипт с помощью pytest
"Freezing pytest
Если вы замораживаете свое приложение, используя такой инструмент, как PyInstaller, чтобы распространить его среди своих конечных пользователей, этоХорошей идеей будет также упаковать тестового бегуна и запустить ваши тесты с помощью замороженного приложения.Таким образом ошибки упаковки, такие как зависимости, не включенные в исполняемый файл, могут быть обнаружены на раннем этапе, а также позволяют отправлять тестовые файлы пользователям, чтобы они могли запускать их вих машины, которые могут быть полезны для получения дополнительной информации о трудно воспроизводимой ошибке.
К счастью, в последних выпусках PyInstaller уже есть настраиваемый хук для pytest, но если вы используете другой инструмент для замораживания исполняемых файлов, таких как cx_freeze илиpy2exe, вы можете использовать pytest.freeze_include (), чтобы получить полный списоквнутренних модулей pytest.Однако настройка инструментов для поиска внутренних модулей варьируется от инструмента к инструменту.
Вместо того, чтобы замораживать исполняющий элемент pytest как отдельный исполняемый файл, вы можете заставить свою замороженную программу работать в качестве запускающего pytest с помощью некоторого умного аргумента.обработка во время запуска программы.Это позволяет вам иметь один исполняемый файл, что обычно более удобно.Обратите внимание, что механизм обнаружения плагинов, используемый pytest (точки входа setupttools), не работает с замороженными исполняемыми файлами, поэтому pytest не может автоматически найти сторонние плагины.Чтобы включить сторонние плагины, такие как pytest-timeout, они должны быть явно импортированы и переданы в pytest.main. "
# contents of app_main.py
import sys
import pytest_timeout # Third party plugin
if len(sys.argv) > 1 and sys.argv[1] == "--pytest":
import pytest
sys.exit(pytest.main(sys.argv[2:], plugins=[pytest_timeout]))
else:
# normal application execution: at this point argv can be parsed
# by your argument-parsing library of choice as usual
...
Эта большая цитата блока взята из здесь .