Артем tem@, я бы начал с передачи в заголовок Content-Disposition не пути к файлу, а его имени. Ну и полезно задействовать модуль mimetypes для определения типа по расширению и подстановке его в параметры конструктора MIMEBase вместо "application\octet-stream".
fdroid, у меня такой дома. А ещё у меня травма спины и в среднем 12-часовые рабочие смены, так что я очень требователен, но остаюсь доволен уже несколько лет.
Bastax13, модули для Python можно писать на C и компилировать в бинарные библиотеки. Почитать можно здесь. А если C - это для вас не вариант, то можно посмотреть в сторону транслятора Cython.
Bastax13, при первом запуске получаете HWID (самая большая проблема будет с этим), на его основе генерируете некоторую последовательность, шифруете и сохраняете в файле. При следующем старте опять получаете HWID, проверяете наличие файла, расшифровываете, сравниваете полученные данные с полученным HWID. Если файла нет или данные в нём неверные, выдаёте ошибку и завершаете работу. Пользователь не сможет записать что-то в файл не зная алгоритма и ключа шифрования. А так как расковырять python-программы очень легко, код шифрования лучше написать в виде pyd-библиотеки. Так это обычно делается.
Да, программа может изменять сама себя, но описанное вами намного лучше реализуется хранением подобных данных в каком-либо внешнем средстве конфигурации (ini-файл, реестр, прочее) и изменением её. Вам это зачем?
Этот вопрос задавался раза три или четыре за последний месяц. Правда, каждый раз заголовок у него был типа "Как сделать такое?", так что найти будет не просто.
Продавать хостинг собираетесь за 10 рублей в месяц? Иначе не выдержите конкуренции с хостерами, которые предлагают за 80-120 р. существенно больше возможностей на надёжном хостинге в ДЦ и с поддержкой.