python中的pyc扩展名文件,类似于Java的Class字节码文件,是由编译器编译得来的,供解释器使用;
当我们部署程序时,不想暴露源码,可以使用pyc文件;
它存在__pycache__文件里
方式一:命令行:
使用python内置的py_compile库,操作简单;
python3.6 -m py_compile test.py
python也可以不用指定版本
-m的作用:把模块当作脚本来执行
方式二:脚本:
#!/usr/bin/env python3.6
# coding=utf-8
import py_compile
py_compile.compile('test.py')
执行完后,会出现名为“pycache”的文件夹,里面有test.cpython-36.pyc文件;
我们运行此pyc文件,
python3.6 __pycache__/test.cpython-36.pyc
使用python内置的compileall库;
同样有2种方式,这里使用命令行演示;
test文件夹下有两个文件test.py和test2.py;
使用命令行,一次将2个文件编译成对应的2个pyc文件,
方式一:命令行:
python3.6 -m compileall test
执行完毕后,在test文件夹下会生成__pycache__文件夹,其中有两个pyc文件,test2.cpython-36.pyc和test.cpython-36.pyc,这两个pyc文件也可以执行。
方式二:脚本:
import compileall
compileall.compile_dir(r'/Users/***/PythonFiles/')
Python Shell 命令生成
直接通过命令来运行,可以看到下面的命令中并没有用到compile()函数, 这是因为py_compile模块的main()函数中调用了compile().
python3 -m py_compile ****.py
python3 -O -m py_compile ****.py
-O 优化成字节码
-m 表示把后面的模块当成脚本运行
-OO 表示优化的同时删除文档字符串
如果你想看compile(), compile_dir(), compile_path()具体每个参数是干吗用的,可以使用print py_compile.compile().__doc__来查看,或者直接打开py_compile.py,compileall.py文件来看。
直接使用python编译源码时,会生成对应的(.pyc)文件,这些文件会被存放在__pycache__文件夹下,我们可以将里边的文件copy出来,这时候可以删除对应的.py文件,同时需要将***.pyc文件的名字进行修改。
例如: python 的.py文件叫 main.py, 生成的.pyc文件叫main.cpython-36.pyc,在我们使用该模块的时候,需要将main.cpython-36.pyc修改为main.pyc, 这里的“cpython-36”表示的是我在python 3.6 的环境下编译的。改完以后,在命令行使用命令运行总pyc文件或者单个文件就可以了