【发布时间】:2017-08-29 05:55:24
【问题描述】:
我有一堆 Python 脚本,由几个不同的用户运行。脚本放置在 Windows 服务器环境中。
我希望实现的是以允许标准用户运行它们但无权读取/修改/移动它们的方式保护这些脚本。
这是否可能?如果可以,最佳策略是什么?
提前致谢。
【问题讨论】:
标签: python windows security server
我有一堆 Python 脚本,由几个不同的用户运行。脚本放置在 Windows 服务器环境中。
我希望实现的是以允许标准用户运行它们但无权读取/修改/移动它们的方式保护这些脚本。
这是否可能?如果可以,最佳策略是什么?
提前致谢。
【问题讨论】:
标签: python windows security server
您可以使用 Cython 将 Python 模块编译为本机库,并且仅提供编译后的文件;尽管它涉及很多麻烦并且在某些情况下不起作用。它们仍然可以被反编译为 C 代码,但它几乎不可读。
优点:1. 编译后的库可以作为普通 Python 模块导入。
缺点:1. 需要额外设置; 2. 在某些情况下不起作用,例如celery 任务不能驻留在已编译的模块中,因为: 3. 你失去了自省能力; 4. tracebacks 基本上是不可读的。
【讨论】:
您可以考虑分发它 - 将其转换为可执行的二进制文件。使用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 脚本转换为一个可执行文件,该文件将显示一个 GUI 并具有指定的图标。如果参数--onefile 和--windowed 被忽略,将会有一小堆文件,如DLL 和可执行文件,它们将显示一个控制台。阅读documentation,尤其是section about usage。
此批处理脚本必须位于您的 Python 脚本文件夹中,您只需在其中运行它,结果就是子文件夹“dist”中的文件“The_Greatest_Prog.exe”。您现在可以将此可执行文件提供给您的朋友,而不会让他们破坏您的代码。
[编辑]
您也可以使用标准包py_compile。输出将是一个扩展名为“.pyc”的文件。验证工作目录是否设置为您的 scipt 的路径,并从您首选的 Python 控制台调用此编译器。
>>> import py_compile
>>> py_compile.compile("the_greatest_script.py")
然后你会在你的文件夹中看到文件“the_greatest_script.pyc”,它可以被其他Python Scripts分发和导入。
【讨论】:
没有办法让它们不可读但同时可执行。
【讨论】: