小编kur*_*ige的帖子

将python脚本添加到非python应用程序的"正确"方法

我目前正在使用python中编写的插件为用户添加扩展桌面应用程序(C++)功能的能力.

天真的方法很简单.嵌入python静态库并按照分散在Web上的任意数量的教程来描述如何初始化和调用python文件,并且你已经完成了很多工作.

然而...

我正在寻找的更像是Blender所做的.Blender可以通过python脚本完全自定义,它需要一个外部 python可执行文件.(即,python实际上并没有嵌入到blender可执行文件中.)因此,当然,在编写blender脚本时,可以包含site-packages目录中已有的任何模块.不是那个建议,因为这会限制脚本的可移植性.

所以,我想知道的是,如果已经有办法让你的蛋糕也吃了它.我想要一个使用以下内容的插件系统:

  • 嵌入式python解释器.

    Blender的方法的缺点是它迫使你在你的系统上全局安装一个特定的,可能过时的python版本.有一个嵌入式解释器允许我控制正在使用的python版本.

  • 防火墙插件.

    virtualenv每个插件的一些等价物; 允许他们安装他们需要或想要的所有模块,但要将它们与其他插件中的可能冲突分开.也许zc.buildout是这里更好的人选,但同样,我给建议公开.对于实现这一目标的最佳方式,我有点不知所措.

  • 尽可能无痛......

    对于用户.只要大部分内容对插件编写者尽可能透明,我愿意付出额外的努力.


如果你们中的任何人有这方面的经验,你们的帮助将非常感激.:)


编辑: 基本上,我想要的简短版本是简单的virtualenv,但没有捆绑的python解释器,以及一种以编程方式激活特定"虚拟环境"的方法,就像zc.buildoutsys.path操作(sys.path[0:0] = [...]技巧)一样.

双方virtualenvzc.buildout包含我想要的部分,但也产生重新定位的建立是我,或插件开发者可以简单地压缩并发送到另一台计算机.

简单地操作.pth文件,或sys.path直接在脚本中操作,从我的应用程序执行,让我在那里中途.但是,当编译模块是必要的时候,例如PIL,这还不够.

c++ python scripting plugins desktop-application

21
推荐指数
1
解决办法
5226
查看次数

DSA:黑客可以用*公钥做什么?

我正在开发的共享软件注册系统将公共DSA密钥嵌入可执行文件本身,私钥驻留在服务器上.(为便于讨论,让我们假设服务器是100%安全的,有没有办法对任何人得到他们的手私钥.)

每当购买程序时,服务器通过使用私钥对用户的名称进行签名来为用户生成许可证.然后将该许可证通过电子邮件发送给用户.一旦用户手动将其名称和许可证输入共享软件应用程序,它就会被嵌入在应用程序中的公钥验证为有效或无效的许可证.

然而,对于具有正确的"技术诀窍"的确定的人来说,反汇编可执行文件并检索公钥将是相当微不足道的.

我的问题是,他们可以用它做什么?公钥本身是完全无害的吗?公钥是否足以对密钥生成器进行逆向工程?

好奇的人想知道.提前致谢!

security signing registration dsa public-key

18
推荐指数
2
解决办法
6360
查看次数

你如何进行单元测试?编译器标志?静态库?

我刚刚开始使用TDD,并且很好奇其他人采取什么方法来运行他们的测试.作为参考,我使用谷歌测试框架,但我相信这个问题适用于大多数其他测试框架和C/C++以外的语言.

到目前为止,我的一般方法是做三件事之一:

  1. 将大部分应用程序写入静态库,然后创建两个可执行文件.一个可执行文件是应用程序本身,而另一个是具有所有测试的测试运行器.两者都链接到静态库.

  2. 将测试代码直接嵌入到应用程序本身中,并使用编译器标志启用或禁用测试代码.这可能是我迄今为止使用过的最好的方法,但是稍微混乱了代码.

  3. 将测试代码直接嵌入到应用程序本身中,并且在给定某些命令行开关的情况下,运行应用程序本身或运行应用程序中嵌入的测试.

这些解决方案都不是特别优雅 ......

你是怎么做到的?

c++ tdd unit-testing application-design

14
推荐指数
2
解决办法
2276
查看次数