我有一堆Python脚本,由几个不同的用户运行。脚本放在Windows服务器环境中。
我希望实现的目的是保护这些脚本,使标准用户可以运行它们,但无权读取/修改/移动它们。
这是否可能,如果是,那么最佳策略是什么?
提前致谢。
答案 0 :(得分:1)
您可以使用Cython将Python模块编译到本机库中,并仅提供编译文件;虽然它涉及很多麻烦但在某些情况下不起作用。它们仍然可以反编译为C代码,但它几乎是不可读的。
优点:1。编译库可以作为普通的Python模块导入。
缺点:1。需要额外设置; 2.在某些情况下不起作用,例如celery任务不能驻留在已编译的模块中,因为:3。你失去了内省能力;追溯基本上是不可读的。
答案 1 :(得分:0)
没有办法让它们不可读但可以同时执行。
答案 2 :(得分:0)
您可以考虑分发它 - 将其转换为可执行的二进制文件。使用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控制台调用此compliler。
>>> import py_compile
>>> py_compile.compile("the_greatest_script.py")
然后您将在文件夹中看到文件“the_greatest_script.pyc”,该文件可由其他Python脚本分发和导入。