Обычно код на Питон запускают двумя способами: через терминал или через текстовый редактор / IDE.

При этом стоит отметить, что файлик Python — это всего лишь скрипт, который сохранён в расширении .py. Да, это очевидно, но в этом и кроется проблема: иногда нужно скрыть исходный код, а поделиться программкой (в виде альфа-версии, например) очень хочется.

Одно из решений, которое закрывают боль с исходным кодом — это конвертация файла Python в исполняемый exe-файлик.

В этой статье мы научимся создавать «экзешники» при помощи двух библиотек: Pyinstaller and auto-py-to-exe.

Перед тем, как продолжить чтение статьи, скачайте этот репозиторий. Он здорово поможет вам понять процесс, если вы будете повторять все шаги вместе с нами.

Почему возникает потребность конфертировать Python-код в EXE

Код могут украсть. Об этом мы уже говорили выше. Куда проще достать исходный код непосредственно из py-файла, чем из скомпилированного приложение. Py-файл достаточно просто открыть!
Хочется поделиться кодом с другими юзерами. Дело не только в том, что ваш код могут украсть. Зачастую код содержит зависимости, которыми должен владеть другой юзер перед запуском вашего Python-кода. Но что, если он вообще ничего не смыслит в программировании? Не заставишь ведь его сперва выучить программирование, чтобы оценить ваше новое суперприложение. Проще создать исполняемый файл.
Исполняемый файл можно запускать автоматически, по расписанию. Этот пункт актуален, если вы решили написать утилиту для вашего ПК, и эта утилита должна запускаться либо в определенное время, либо вместе с запуском ОС.

Конвертация кода Python в файл .exe

 

import pandas as pd

from pandas.api.types import CategoricalDtype

def perform_validation(filename:str):
"""
A function to validate inputs for NYC Airbnb Open data.
"""
path_to_data = "../.."
data = pd.read_csv(f"{path_to_data}{filename}")

# Convert neighbourhood_group to type category
neighbourhood_group_to_cat = CategoricalDtype(
categories=["Manhattan", "Brooklyn", "Queens", "Bronx", "Staten Island"],
ordered=False
)

data["neighbourhood_group"] = data["neighbourhood_group"].astype(neighbourhood_group_to_cat)

# Convert room_type to type category
room_type_to_cat = CategoricalDtype(
categories=["Entire home/apt", "Private room", "Shared room"],
ordered=False
)

data["room_type"] = data["room_type"].astype(room_type_to_cat)

# Convert last_review to datetime
data["last_review"] = pd.to_datetime(data["last_review"])

# Minimum nights a person can stay is one night
assert data["minimum_nights"].min() >= 1

# Minimum number of reviews is 0
assert data["number_of_reviews"].min() >= 0

# Minimum number of reviews per month
assert data["reviews_per_month"].min() >= 0.00

# Minimum amount of listings per host
assert data["calculated_host_listings_count"].min() >= 1

# Number of days when listing is available for books
# Could be 0 if tennant has long term booking
assert data["availability_365"].min() >= 0

# Save validated data
data.to_csv("validated_ab_nyc_2019.csv", index=False)

if __name__ == "__main__":
# User inputs filename
filename = input("Enter filename: ")

# Ensure it's a string
if not filename.isalpha():
filename = str(filename)

# Automated validation
perform_validation(filename)

Вот структура файлов на GitHub:

# Directory structure
| AB_NYC_2019.csv
|
+---auto_py_to_exe
| | requirements.txt
| | validation.py
+---pyinstaller
| requirements.txt
| validation.py

Каждая из директорий должна обладать своей виртуальной средой. Убедитесь, что среды развёрнуты и в директории pyinstaller, и в auto-py-to-exe.

Сохраните ваш код и скопируйте его в обе директории.

Что делать в Pyinstaller

Ещё раз убедитесь, что виртуальная среда развёрнута. Да, мы настаиваем. Проверьте, установлены ли все зависимости между библиотеками и кодом.

Всё в порядке? Запускайте команду:

pyinstaller --onefile validation.py

Процесс должен запуститься, и в конце консоль сообщит: «Completed successfully». Значит, всё прошло успешно

В папке с бибилотекой и кодом должны появиться две новые директории под названиями build и dist. В папке dist вы найдёте заветный exe-файл. Запустите его и проверьте работу приложения.

Что делать в Auto-py-to-exe

Также скиньте файлик с кодом в папку с библиотекой и проверьте зависимости между кодом и библиотекой.

Запустите команду:

auto-py-to-exe

Команда запустит графический интерфейс.

  1. В строчке «Script Location» нажмите «Browse» и выберите py-скрипт.
  2. В строчке «Onefile» выберите, скомпилируется код в единый файл или в папку. В папке будет содержаться exe-файл и все зависимости кода.
  3. В строчке «Console Window» выберите настройки отображения exe-приложения, когда оно будет запущено. Если выбрать «Console Based», запустится и программа, и консоль, в которой будут показаны процессы. Опция «Window Based» скрывает консоль.
  4. Нажмите кнопку «Convert .py to .exe». Готово!

Запускаем exe-файл

В обоих случаях, после компиляции и запуска exe-файла, тот запустит консоль и попросит вас ввести имя файла. Придумайте его и укажите расширение, в котором всё должно работать. К примеру, Tproger-is-the-best-it-media-in-the-world.csv. Тогда консоль закроется, а в папке появится заветный файлик с расширением .csv.

И всё — вы великолепны!

Источник: DataCamp