结果当然是当你尝试执行时没有双击处理程序,或者如果你将扩展名改为pyc,你就得到了控制台.
有没有人知道解决这个问题的方法?没有控制台的.pyc的影响?
谢谢!
更新:
由于通过execfile运行或双击windows中的图标所以不生成此文件的编译版本,我在命令行启动python,然后:
import py_compile py_compile.compile("[FileName].pyw")
这是我获得.pywc扩展名的地方.
我的Python版本是2.5.4
解决方法
如果你需要的是以* .pyc或* .pyo的形式向客户端或用户提供已编译的应用程序,并避免在执行时打开控制台,一个好的选择是留下一个调用主应用程序的* .pyw包装器.
让我们假设主应用程序在main.pyc中,并且入口点为main,让我们调用包装器top.pyw,它通常看起来像:
# top.pyw file import main if __name__ == "__main__": import sys main.main(*sys.argv[1:])
你的main.py文件看起来像这样:
# main.py file """ Main module documentation (optional) """ # import modules # function and class deFinitions def main(*argv): # Parses the options (optional) import optparse parser = optparse.OptionParser(usage="%prog [<options>]\n" + __doc__) parser.add_option(...) parser.add_option(...) opt,args = parser.parse_args(list(argv)) # Calls the appropriate function: my_function(...)
另请注意,* .pyc往往是特定于版本的.您可以检查上述解决方案是否与pyInstaller and similar “independent” distribution methods兼容.
编辑=>实际上,如果使用pyInstaller,您可以简单地包含所有脚本并生成一个独立于Python安装的可执行文件,并且在没有控制台的情况下启动(创建规范时使用-w选项).您甚至不需要使用包装器或更改扩展.虽然它将是一个更大的文件,这可能是你正在寻找的.
最后,以防万一你要去的地方:如果你不想让别人从编译的字节码中提取源代码,不要忘记你需要额外的预防措施.这称为代码混淆,SO上还有其他线程(for example this one).如果您只想在那个问题上找到旧答案,请不要犹豫,发布一个新问题,这些事情可以快速改变.
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。