加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Python > 正文

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

发布时间:2020-12-20 12:15:57 所属栏目:Python 来源:网络整理
导读:我试图在没有控制台的情况下将pyw文件编译成pyc.当我尝试使用它直接编译时,结果是一个pywc文件,但似乎 pythonw.exe没有注册该扩展名为python.exe为pyc执行的文件之一. 结果当然是当你尝试执行时没有双击处理程序,或者如果你将扩展名改为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).如果您只想在那个问题上找到旧答案,请不要犹豫,发布一个新问题,这些事情可以快速改变.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读