我正在尝试在没有控制台的情况下将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
答案 0 :(得分:6)
(在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兼容。
编辑=&gt; 实际上,如果您使用pyInstaller,您可以简单地包含所有脚本并生成一个独立于Python安装的可执行文件,并且不启动控制台({{ 1}}创建规范时的选项)。您甚至不需要使用包装器或更改扩展。虽然它将是一个更大的文件,但这可能就是你想要的。
最后,以防万一你要去的地方:如果你不希望别人从编译的字节码中提取源代码,不要忘记你需要额外的预防措施。这称为代码混淆,并且SO上还有其他线程(for example this one)。如果您只是在那个问题上找到旧答案,请不要犹豫,发布一个新问题,这些事情可以快速改变。
答案 1 :(得分:3)
您可以使用FTYPE和ASSOC命令将.pywc文件与pythonw.exe关联。
ASSOC用于将扩展名与文件类型相关联,FTYPE将文件类型与用于打开它的命令相关联。以下命令显示我的计算机上的现有关联:
C:\Python26>assoc .py
.py=Python.File
C:\Python26>assoc .pyc
.pyc=Python.CompiledFile
C:\Python26>assoc .pyw
.pyw=Python.NoConFile
C:\Python26>assoc .pywc
File association not found for extension .pywc
这些命令通过文件类型显示扩展程序所关联的程序:
C:\Python26>ftype Python.CompiledFile
Python.CompiledFile="C:\Python26\python.exe" "%1" %*
C:\Python26>ftype Python.NoConFile
Python.NoConFile="C:\Python26\pythonw.exe" "%1" %*
所以看起来你可以将.pywc文件和Python.NoConFile关联起来:
assoc .pywc=Python.NoConFile
答案 2 :(得分:3)
读取.pyw
文件的解释器也能够读取python编译的.pyc
格式文件。只需将.pyc
文件重命名为.pyw
即可。它会运行(虽然它仍然是版本特定的),你不会得到丑陋的控制台。
答案 3 :(得分:0)
只需将[fileName] .pywc重命名为[fileName] .pyw并将其打开。它对我有用。同样,当您尝试打开代码进行编辑时,该代码也不可见。它像记事本中的exe文件一样打开。