У меня есть куча скриптов Python, которые должны запускаться несколькими разными пользователями. Сценарии размещаются в среде сервера Windows.

Чего я хочу добиться, так это защитить эти сценарии таким образом, чтобы обычные пользователи могли их запускать, но не имели прав на их чтение / изменение / перемещение.

Возможно ли это вообще, и если да, то какова оптимальная стратегия?

Заранее спасибо.

0
user3170354 29 Авг 2017 в 08:55

3 ответа

Лучший ответ

Вы можете подумать о его распространении - преобразовать его в исполняемый двоичный файл. Создать исполняемый файл легко, используя PyInstaller. Может быть установлен через PyPi.

pip install pyinstaller

Хорошая вещь в PyInstaller заключается в том, что вы можете написать пакетный скрипт Windows для создания исполняемого дистрибутива.

Примере:

@echo off
mkdir dist
mkdir dist/build

pyinstaller ^
--onefile ^
--windowed ^
--workpath=dist\build ^
--distpath=dist ^
--icon="gui\icon.ico" ^
--name="The_Greatest_Prog" ^
the_greatest_script.py

rmdir /S /Q dist\build

cd dist
The_Greatest_Prog
PAUSE

Здесь происходит то, что PyInstaller преобразует ваш скрипт Python в один исполняемый файл, который будет отображать графический интерфейс пользователя и будет иметь указанную иконку. Если аргументы --onefile и --windowed пропущены, будет небольшая группа файлов, таких как DLL, и исполняемый файл, который покажет консоль. Прочитайте документацию, особенно раздел об использовании.

Этот пакетный скрипт должен находиться внутри папки вашего скрипта Python, где вы просто запускаете его, и в результате файл «The_Greatest_Prog.exe» находится внутри подпапки «dist». Теперь вы можете передать этот исполняемый файл своим друзьям, чтобы они не испортили ваш код.

< Сильный > [ EDIT ]

Вы также можете использовать стандартный пакет py_compile. Выводом будет файл с расширением «.pyc». Убедитесь, что в рабочем каталоге указан путь к вашему сценарию, и вызовите этот компилятор из предпочитаемой вами консоли Python.

>>> import py_compile
>>> py_compile.compile("the_greatest_script.py")

Затем вы увидите файл «the_greatest_script.pyc» в вашей папке, который может распространяться и импортироваться другими скриптами Python.

0
Sven Krüger 29 Авг 2017 в 07:03

Вы можете компилировать модули Python в нативные библиотеки с помощью Cython и предоставлять только скомпилированные файлы; хотя это включает в себя много хлопот и не работает в некоторых случаях. Они все еще могут быть декомпилированы в код на C, но это будет в основном нечитаемым.

Плюсы: 1. Скомпилированные библиотеки можно импортировать как обычные модули Python.

Минусы: 1. требует дополнительной настройки; 2. не работает в некоторых случаях, например Задачи сельдерея не могут находиться в скомпилированных модулях, потому что: 3. вы теряете способности к самоанализу; 4. трассировки в основном не читаются.

1
Aleksandr Borisov 29 Авг 2017 в 09:13

Невозможно сделать их не читаемыми, но исполняемыми одновременно.

0
Honza Zíka 29 Авг 2017 в 06:00