微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

python – 编译.pyw文件,以便它可以像.pyc一样运行而无需控制台

我试图在没有控制台的情况下将pyw文件编译成pyc.当我尝试使用它直接编译时,结果是一个pywc文件,但似乎 pythonw.exe没有注册该扩展名为python.exe为pyc执行的文件之一.

结果当然是当你尝试执行时没有双击处理程序,或者如果你将扩展名改为pyc,你就得到了控制台.

有没有人知道解决这个问题的方法?没有控制台的.pyc的影响?

谢谢!

更新:
由于通过execfile运行或双击windows中的图标所以不生成文件的编译版本,我在命令行启动python,然后:

import py_compile
py_compile.compile("[FileName].pyw")

这是我获得.pywc扩展名的地方.
我的Python版本是2.5.4

解决方法

(在OP的帖子中进行了一些讨论)

如果你需要的是以* .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 举报,一经查实,本站将立刻删除。

相关推荐