我正在用Python开发一个GPL许可的应用程序,需要知道GPL是否允许我的程序使用专有的插件.这就是FSF在这个问题上所说的话:
如果根据GPL发布的程序使用插件,那么插件的许可证有哪些要求?
这取决于程序如何调用其插件.如果程序使用fork和exec来调用插件,那么插件是单独的程序,因此主程序的许可证对它们没有要求.
如果程序动态链接插件,并且它们相互进行函数调用并共享数据结构,我们认为它们构成了一个程序,必须将其视为主程序和插件的扩展.这意味着插件必须在GPL或兼容GPL的免费软件许可下发布,并且在分发这些插件时必须遵循GPL的条款.
如果程序动态链接插件,但它们之间的通信仅限于使用某些选项调用插件的"main"函数并等待它返回,这是一个临界情况.
fork/exec和动态链接之间的区别,除了是一种人为的,也不会延续到解释语言:Python/Perl/Ruby插件如何通过import或者加载execfile?
(编辑:我理解为什么fork/exec和动态链接之间的区别,但似乎有人想要遵守GPL但反对"精神" - 我不能 - 只能使用fork/exec和进程间通信几乎可以做任何事情).
最好的解决方案是在我的许可证中添加一个例外以明确允许使用专有插件,但我无法这样做,因为我使用的是Qt/PyQt,这是GPL.
我想在一个跨平台(windows/mac/linux)Python应用程序中,在相应的文件管理器中打开一个文件夹窗口.
在OSX上,我可以在finder中打开一个窗口
os.system('open "%s"' % foldername)
Run Code Online (Sandbox Code Playgroud)
并在Windows上
os.startfile(foldername)
Run Code Online (Sandbox Code Playgroud)
那unix/linux怎么样?有没有标准的方法来做到这一点,或者我需要特殊情况gnome/kde/etc并手动运行相应的应用程序(nautilus/konqueror/etc)?
这看起来像是可以由freedesktop.org人员指定的东西(一个python模块,类似于webbrowser,也会很好!).
实现简单崩溃/错误报告机制的最佳方法是什么?
细节:我的应用程序是跨平台的(mac/windows/linux)并用Python编写,所以我只需要一些能给我发送少量文本的东西,例如只是一个时间戳和一个追溯(我已经生成并显示在我的错误对话框).
如果它可以简单地通过电子邮件发送它会很好,但是如果不在应用程序中包含smtp服务器的用户名和密码,我就无法想到这样做...我应该在服务器端实现一个简单的Web服务吗?并让我的应用程序发送带有信息的HTTP请求?有更好的想法吗?
我正在使用urllib.urlretrieve下载文件,并使用reporthook参数实现下载进度条.由于urlretrieve不直接支持身份验证,我想出了
import urllib
def urlretrieve_with_basic_auth(url, filename=None, reporthook=None, data=None,
username="", password=""):
class OpenerWithAuth(urllib.FancyURLopener):
def prompt_user_passwd(self, host, realm):
return username, password
return OpenerWithAuth().retrieve(url, filename, reporthook, data)
Run Code Online (Sandbox Code Playgroud)
这有效 - 但似乎可能有更直接的方法来做到这一点(可能使用urllib2或httplib2或......) - 任何想法?
是否存在一个小的,独立的库,它会将基于文本格式(例如LaTeX或MathML)的方程式渲染为图像(矢量或栅格)?
如果它是Python或Python友好的话会更好.
(我发现的一种可能性:Matplotlib使用 Python代码来解析和显示LaTeX方程,使用gl2ps.如果我没有找到任何其他内容,似乎可以将所有相关位提取到一个单独的库中.)
编辑:通过"自包含"我的意思是他们不能使用TeX/LaTex本身,因为不幸的是我不能依赖它被安装
我正在尝试测试给定点(x, y)是否位于或接近a 的轮廓QGraphicsPathItem.
使用QGraphicsItem.contains()或.collidesWithItem() / Path()不执行:如果点包含在路径内部的区域内,那些也会返回True,而我只想测试轮廓上的点.我怎么能做到这一点?
在Python应用程序中创建和验证PGP/GPG签名的最简单方法是什么?
我可以使用子进程调用pgp或gpg并解析输出,但我一直在寻找一种不需要安装外部程序的方法(我的应用程序是跨平台的mac/windows/unix).
我正在寻找一个“安全”的 eval 函数来实现类似电子表格的计算(使用 numpy/scipy)。
由于明显无法修复的安全问题,执行此操作的功能(rexec 模块)自 2.3 以来已从 Python 中删除。有几个第三方黑客声称这样做 - 我发现的最深思熟虑的解决方案是 这个 Python Cookbok recipe,“safe_eval”。
如果我使用它(或类似的东西)来防止恶意代码,我是否相当安全,或者我是否坚持编写自己的解析器?有谁知道任何更好的选择?
编辑:我刚刚发现了RestrictedPython,它是 Zope 的一部分。欢迎对此提出任何意见。
我在QAction主窗口的菜单中添加了一堆s.这些操作也可以通过键盘触发,我希望快捷方式在菜单中可见,例如
-----------------
|Copy Ctrl+C|
-----------------
Run Code Online (Sandbox Code Playgroud)
我可以这样做QAction.setShortcut().但是,我不希望这些QAction快捷方式触发这些; 我正在别处处理所有键盘输入.
这可能吗?我可以在QAction中禁用快捷方式但在菜单中仍然有快捷方式文本(在此示例中为Ctrl+ C)吗?
编辑:我最终做的方式是连接菜单aboutToShow()和aboutToHide()事件,启用/禁用快捷方式,使它们仅在显示菜单时处于活动状态.但我很欣赏更清洁的解决方案......
在Qt4应用程序中,是否可以告诉paintEvent()处理程序内部重绘是否由调整大小触发?
我有一个小部件是重绘(一个复杂的剧情)很慢,我想只是blit一个调整大小的像素图,加快调整大小,而小部件被调整,并调整大小完成时重绘的窗口小部件.
我已经尝试在开头和结尾设置/取消设置一个标志,resizeEvent()但这似乎不起作用(即标志总是关闭paintEvent()).
Python提供了几种创建线程的方法.哪个提供最好的API和最多的控制?
谢谢.