请考虑以下情形:
应该为外部用户部署python工具,使(a)源受到保护,而(b)确保只有拥有有效许可证的用户才能使用它。此外,对于内部用户,代码应以纯python形式提供,因此可以使用python调试器进行调试,而无需进行编译。
可用许可证检查并用C编写。
(a)是通过使用cython解决的。
关于(b)的想法:
可以将许可证检查应用于程序的“中央”部分(即“一个包含足够的业务逻辑以便没有人可以代替它的类”)。当然,我可以使用cython将许可证检查链接到此类的* .pyd并使用c函数,但是内部用户将无法使用/调试该类。另一方面,在调试时将许可证检查应用于“不重要”的类将意味着(大概)可以很容易地进行交换。
创建一个单独的函数“ licenseIsValid()-> bool”并从代码的中心位置调用它是不可行的,因为它可以轻松替换。
事实上,(几乎)所有用python编写的内容都可以替换,因此是不安全的。
因此,我想到了在执行与python相关的任何操作之前 实施许可证检查的想法:在dllmain函数内部。我可以在dll / pyd启动时调用许可证检查功能,并在执行任何cython代码之前停止应用程序。
是否可以将自定义dllmain添加到cythonized模块?添加dllmain甚至安全吗(或者cython是否需要“专门的” dllmain)?
最后一句话:我知道python是使用许可证检查创建封闭源代码的错误语言选择。但是使用python的优势远胜于此...
先谢谢您, 扬