首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

隐藏源码细节:Python脚本编译pyc文件

2 Python的特点 首先我们需要介绍下Python的特点: 源码距离底层更远; 运行时都需要生成字节码,交由解释器执行; 每次执行脚本,虚拟机总要多出加载和链接的流程,所以相比于编译型语言速度慢。...运行pyc文件时用的python版本要和生成pyc文件的python版本一致,否则会出现Bad magic number in .pyc file错误 4 pyc文件如何产生 当我们运行python文件程序的时候...5 生成pyc文件方法 分为编译单个文件和多个文件,通过命令行操作如下: # 单个文件 python -m py_compile 脚本.py # 多个文件 python -m compileall 脚本文件所在目录...(r'脚本文件所在目录') 运行pyc python 脚本.pyc 6 _pycache__文件夹 解释器首先将其编译为字节码(这是过度简化)并将其存储在__pycache__文件夹中。...因此常常使用如下方式产生同级目录下的.pyc文件: python -m compileall -b . # 在脚本所在目录下运行 加上参数-b就可以了。

2.6K40

如何生成Python的 .pyc 文件

例如,使用命令 python3.6 -m py_compile test.py 将会生成一个名为__pycache__/test.cpython-36.pyc的文件 脚本方式:在Python脚本中导入py_compile...例如,如果test文件夹下有test.py和test2.py两个文件,可以通过以下命令一次性将这两个文件编译成对应的.pyc文件: python3.6 -m compileall test 该命令会在...test文件夹下生成__pycache__文件夹,其中包含test2.cpython-36.pyc和test.cpython-36.pyc两个文件 3....生成.pyc文件的使用与执行 执行.pyc文件:生成的.pyc文件可以直接被Python解释器执行。...由特定版本的Python编译生成的.pyc文件不能被不同版本的Python解释器执行[ 平台无关性:.pyc文件是平台无关的,这意味着在一个操作系统上生成的.pyc文件可以在另一个操作系统上执行,只要Python

30510
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    python的pyc和pyo文件

    python并非完全是解释性语言,它是有编译的,先把源码py文件编译成pyc或者pyo,然后由python的虚拟机执行,相对于py文件来说,编译成pyc和pyo本质上和py没有太大区别,只是对于这个模块的加载速度提高了...,并没有提高代码的执行速度,通常情况下不用主动去编译pyc文件,文档上说只要调用了import model那么model.py就会先编译成pyc然后加载 1.如果需要特殊的单独编译,则只需要使用py_complie...文件的路径 cfile 表示编译后的pyc文件名称和路径,默认为直接在file文件名后加c 或者 o,o表示优化的字节码 dfile 错误消息保存的路径 doraise 可以是两个值,True或者False...python -O -m py_compile file.py 其中file.py就是我们要编译的源文件 个人感觉这个原理知道就行了,其实没多大用处,仅仅提高了加载速度而已,另外还有一点好处就是可以减少文件的大小...,可能对于嵌入式系统中把需要的模块都编译成pyo文件可减少容量,毕竟嵌入式系统多数都是容量有限,现在的pc硬件越来越强,仅仅提高加载速度没多大作用,不过这也是python的机理,它就是这么干活的,知道就好

    2.1K30

    python生成带有表格的图片

    因为工作中需要,需要生成一个带表格的图片 例如: 直接在html中写一个table标签,然后单独把表格部分保存成图片 或者是直接将excel中的内容保存成一个图片 刚开始的思路,是直接生成一个带有table...当初的目标是直接生成一个图片,并且是只需要安装python依赖库就行,而不需要在系统层面安装相应的依赖包 后来考虑使用Python的图片处理库Pillow,和生成表格式的库prattytable,下面的图片是最终生成的图片效果...总体来说是分为两个步骤: 使用prattytable将要展示的数据生成一个表格字符串 使用pillow,将生成的表格字符串写入到图片中 下面是具体实现: from prettytable import...会自动识别换行符 # python2 draw.multiline_text((space,space), unicode(tab_info, 'utf-8'), fill=(255,255,255),...font=font) # python3 # draw.multiline_text((space,space), tab_info, fill=(255,255,255), font=font)

    5.1K20

    python基础教程:模块高级技巧

    sys.path的初始化按以下几个路径的顺序: (1)包含输入脚本的目录,如果没有输入脚本则是当前目录; (2)环境变量PYTHONPATH(一个目录名称的列表); (3)Python库的安装目录...这是因为,当交互式运行Python解释器时(或者脚本是从标注输入读取的),可以认为传给解释器的脚本文件路径为空,那么就把sys.path[0]设置为空字符串,它告诉Python搜索模块时先从当前文件夹开始...编译后的Python文件:*pyc 为了加速模块的加载时间,Python会缓存已经编译好的模块,并把它们放在与模块同级目录下的__pycache__文件夹下面,编译好的模块的命名方式为:module.version.pyc...(2)编译成.pyc文件时,可以给Python命令两个选项:-O和-OO,使得编译后的文件更小。 -O 去除assert语句; -OO 去除assert语句和__doc__ string。...根据情况来使用这两个选项,用compileall编译文件时加这个选项就是这样子的: python -O -m compileall 文件夹或文件名 生成的pyc文件名称里面有opt-标签,-O的标签是

    80510

    Python的包导入机制

    Prerequisite Python脚本运行的方式? Python脚本运行分为两种方式:一种是作为top level script运行,另一种则是作为被导入的包模块运行。...,当使用top level script的方式运行的时候是不会生成字节码的(即.pyc文件),而通过包模块的方式则会生成字节码。...├── explicit_import.pyc ├── implicit_import.py ├── implicit_import.pyc ├── string.py...同时值得注意的是,显式的相对导入是根据模块的__name__属性来确定相对位置的,因此如果是在top level script中,显式相对导入并不能使用,会报出如下错误: ValueError: Attempted...(作为top level脚本执行)使用显示相对导入的方法:在执行python命令时加上-m选项,此时就会启用模块的__package__属性。

    1.3K10

    Python模块(使用模块中的函数、变量、了解pyc文件)

    模块是Python程序架构的一个核心概念。(言外之意模块在Python中很重要) 模块就好比是工具包,要想使用过这个工具包中的工具,就需要导入import这个模块。...1、标识符可以由字母、下划线和数字组成 2、不能以数字开头 3、不能与关键字重名 注意: 如果在给Python文件起名时,以数字开头是无法在PyCharm中通过import导入这个模块的 三、了解pyc...文件 C: 是compiled编译过的意思 操作步骤: 1、浏览程序目录会发现一个_pycache_的目录 2、目录下会有一个pyzxw_分隔线模块.cpython-37.pyc文件,cpython-37...表示python解释器的版本 3、这个pyc文件是由python解释器将模块的源码转换为字节码 Python这样保存字节码是作为一种启动速度的优化 字节码: Python在解释源程序时是分成两个步骤的...将会加载.pyc文件并跳过编译这个步骤 当Python重编译时,它会自动检查源文件和字节码文件的时间戳 如果你又修改了源代码,下次程序运行时,字节码将会重新自动创建 以上就是关于Python入门教程中的模块简单展开描述

    2.5K20

    通过内置对象理解 Python(一)

    关于 Python 的内置作用域,以下两个方面需要了解: 它是定义 Python 所有顶级函数(或内置函数)的作用域,比如 len 、range 和 print 。...然后Python 解释器会将其包装到 TypeError 异常中,并带有一个有意义的说明: >>> n + 0.12 Traceback (most recent call last): File...Python 冻结了这两个模块,因为它们实现了导入系统的核心,因此,当解释器启动时,它们不能像其他 Python 文件一样被导入。本质上,它们的存在是为了引导导入系统。...当以后再次导入同一个模块时,Python 会检查该模块的 .pyc 版本是否存在,然后直接导入已经编译过的版本,从而节省大量的时间和计算。...如果还没有理解,可以在 Python 代码中直接运行或导入 .pyc 文件,就像其他的 .pyc 文件一样: >>> import test >>> test.

    52010

    Python 基础语法(一)「建议收藏」

    可嵌入型     可以把Python嵌入到c/c++程序中,从而提供脚本功能。   10. 丰富的库     Python标准库确实很庞大。...字节编译的.pyc文件     导入模块比较费时,python做了优化,以便导入模块更快些。一种方法是创建字节编译的文件,这些文件以.pyc为扩展名。     ...pyc是一种二进制文件,是py文件经编译后产生的一种byte code,而且是跨平台的(平台无关)字节码,是有python虚拟机执行的,类似于   java或.net虚拟机的概念。...pyc的内容,是跟python的版本相关的,不同版本编译后的pyc文件是不同的。...value的索引,如果没有,则异常 ValueError l = [1, 2, 2] a = 4 try: print l.index(a) except ValueError, ve:

    59440

    Python3.8 了解的差不多了吧,3.9 新特性了解一下

    使用 Python 进行相对导包的时候,__import__ 出现异常时类型由原来的 ValueError 变成了 ImportError。...Python 现在获取在命令行上指定的脚本文件名的绝对路径(例如:python script.py:__main__ 模块的 __file__ 属性,sys.argv[0] 和 sys.path[0].../__pycache__/relpath.cpython-38.pyc' 可以看到还是相对路径,这问题是 Cpython 的 Moudles/getpath.c 的一个 bug 修改内容如下: * absolutize...在开发模式和调试模式中,使用 encoding 和 decoding 操作的时候加入 encoding 和 errors 两个关键字参数,errors 是声明在编码或者解码的时候出现错误要如何处理。...04 移除的模块用法 math.factorial(x) 从3.9版本开始不赞成,带有整数值的浮点数(比如5.0)。

    3K20
    领券