Что делает коды потенциально небезопасными, так это ссылки на имена и / или атрибуты. Вы можете создать подкласс ast.NodeVisitor
, чтобы убедиться, что в данном фрагменте кода нет таких ссылок перед вами eval
:
import ast
from textwrap import dedent
class Validate(ast.NodeVisitor):
def visit_Name(self, node):
raise ValueError("Reference to name '%s' found in expression" % node.id)
def visit_Attribute(self, node):
raise ValueError("Reference to attribute '%s' found in expression" % node.attr)
Validate().visit(ast.parse(dedent(raw), '<inline>', 'eval'))
eval(raw)
Вам определенно нужен сторонний установщик. Несколько хороших были уже упомянуты. Если Вы решаете пойти с заплаченным установщиком bitrock's решения , отличный выбор, и они - также центральный QT, и их основной бизнес вокруг QT
Как альтернатива с открытым исходным кодом, которую я предложил бы NSIS
Я использую Inno и как он много. Я попробовал немногих других, и этот работал хорошо на меня. (и свободный)
Если Вы только нацелены на Windows, можно использовать WiX (Windows Installer XML), который может быть интегрирован в Visual Studio и MSBuild, настолько относительно простой в использовании. Это свободно и производит допустимые файлы MSI, которые могут быть требованием так или иначе.
, Если Вам скорее нужна простая установка мастера, дайте InnoSetup попытку.
Я передумываю для использования внешнего программного обеспечения как installshield. Они оптимизированы для упаковочной цели и предоставляют очень настраиваемые возможности.
Если у Вас уже есть Visual Studio, можно продолжить использовать проект установки распределить приложение. Инструменты встроены. Это - технология, которую WiX "заменил" (больше на том позже), и это - то, что я делаю. Это не идеальное решение, но это получает меня MSI, который является, как программное обеспечение Windows должно быть установлено в эти дни. Используя InstallShield или что-то могло бы быть лучше, но быть честным у меня никогда не было хорошего опыта ни с какими сторонними установщиками. Поэтому я просто придерживался проекта установки далекого от идеального; это бьет расходы много на дорогие, ужасные и часто расстраивающие сторонние инструменты создания установщика. Короче говоря, это - очень прагматическое решение, и прагматические решения имеют смысл.
Что касается WiX: Я действительно не рекомендую это вообще. Это походит на прекрасную идею, но после нескольких месяцев я переключался назад на проекты установки. Даже при том, что он использовал WiX в течение года больше, чем я использовал проекты установки, наш эксперт WiX берет вдвое более долго, чтобы сделать что-либо. (Он - потрясающий программист, также просто немного ослепленный открытым исходным кодом.) Вы заканчиваете с тысячами строк скопированного текста, которые необходимо поддержать. С парой различных проектов это становится неудобной в сопровождении путаницей.
я не предложил бы пытаться создать установщик в QT самостоятельно. В дополнение к необходимости получить большое поведение просто право, как спокойное приложение это потребует библиотек Qt. Если Вы статически не связываете их, который является возможным с коммерческим выпуском (не LGPL), но трудным и не рекомендуемый. Плюс тогда Вы включали бы две копии библиотек Qt в Вашей загрузке.
сама кварта, кажется, использует nullsoft установщик. Тот один должен сказать, что Вы создающий Ваше собственное не являетесь хорошей идеей.:)