linux下 python 编译pyc 运行错误

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了linux下 python 编译pyc 运行错误相关的知识,希望对你有一定的参考价值。

用python -m py_compile test.py编译后的文件,直接加权限运行结果如下但是用python test.py python test.pyc都没问题由于我程序用到第三方模块 想请教下怎么编译成可直接运行的二进制文件

参考技术A pyc 不是可执行文件
可以试试 pyinstaller 这个打包工具,用 pip 安装,安装之后就可以直接运行下面的命令
pyinstaller -w --onefile xx.py本回答被提问者和网友采纳
参考技术B python test.pyc

python之路-pyc

一、解释型语言和编译型语言

解释性语言:在程序执行之前,先会通过编译器对程序执行一个编译的过程,把程序转变成机器语言。运行时就不需要翻译,而直接执行就可以了。最典型的例子就是C语言。

编译型语言:没有这个编译的过程,而是在程序运行的时候,通过解释器对程序逐行作出解释,然后直接运行,最典型的例子是Ruby。

总结:因为编译型语言在程序运行之前就已经对程序做出了"翻译",所以在运行时就少掉了"翻译"的过程,所以效率比较高。但是我们也不能一概而论,一些解释性语言也可以通过解释器的优化来对程序做出翻译时对整个程序做出优化,从而在效率上超过编译型语言。

     此外,随着Java等基于虚拟机的语言的兴起,我们又不能把语言纯粹地分成解释性和编译型这两种。用Java来举例,Java首先是通过编译器编译成字节码文件,然后在运行时通过解释器给解释成机器文件。所以我们说Java是一种先编译后解释的语言。

二、Python的运行过程

  PyCodeObject和pyc文件

PyCodeObject是Python编译器真正编译成的结果。

当python程序运行时,编译的结果则是保存在位于内存中的PyCodeObject中,当Python程序运行结束时,Python解释器则将PyCodeObject写回到pyc文件中。

当python程序第二次运行时,首先程序会在硬盘中寻找pyc文件,如果找到,则直接载入,否则就重复上面的过程。

所以我们应该这样来定位PyCodeObject和pyc文件,我们说pyc文件其实是PyCodeObject的一种持久化保存方式。

pyc:预编译后的一个字节码文件,不是机器码

 

以上是关于linux下 python 编译pyc 运行错误的主要内容,如果未能解决你的问题,请参考以下文章

pyc文件修复出题经历

Python啥情况下会生成pyc文件

Python 03-pyc数据类型

python基础 pyc

Python自动化运维之路Day2

python程序文件test.py编译后的文件名