其实很简单,

python -m py_compile file.py

python -m py_compile /root/src/{file1,file2}.py
编译成pyc文件。
也可以写份脚本来做这事:
Code:


import py_compile 
py_compile.compile('path') //path是包括.py文件名的路径


python -O -m py_compile file.py

编译成pyo文件。
1.其中的 -m 相当于脚本中的import,这里的-m py_compile 相当于上面的 import py_compile 
2.-O 如果改成 -OO 则是删除相应的 pyo文件,具体帮助可以在控制台输入 python -h 查看

========================

from:http://blogold.chinaunix.net/u3/93255/showart_1944929.html

什么是pyc文件

pyc是一种二进制文件,是由py文件经过编译后,生成的文件,是一种byte code,py文件变成pyc文件后,加载的速度有所提高,而且pyc是一种跨平台的字节码,是由python的虚拟机来执行的,这个是类似于JAVA或者.NET的虚拟机的概念。pyc的内容,是跟python的版本相关的,不同版本编译后的pyc文件是不同的,2.5编译的pyc文件,2.4版本的 python是无法执行的。

什么是pyo文件

pyo是优化编译后的程序 python -O 源文件即可将源程序编译为pyo文件

什么是pyd文件

pyd是python的动态链接库。

为什么需要pyc文件

这个需求太明显了,因为py文件是可以直接看到源码的,如果你是开发商业软件的话,不可能把源码也泄漏出去吧?所以就需要编译为pyc后,再发布出去。当然,pyc文件也是可以反编译的,不同版本编译后的pyc文件是不同的,根据python源码中提供的opcode,可以根据pyc文件反编译出 py文件源码,网上可以找到一个反编译python2.3版本的pyc文件的工具,不过该工具从python2.4开始就要收费了,如果需要反编译出新版本的pyc文件的话,就需要自己动手了(俺暂时还没这能力^--^),不过你可以自己修改python的源代码中的opcode文件,重新编译 python,从而防止不法分子的破解。

生成单个pyc文件

python就是个好东西,它提供了内置的类库来实现把py文件编译为pyc文件,这个模块就是 py_compile 模块。

使用方法非常简单,如下所示,直接在idle中,就可以把一个py文件编译为pyc文件了。(假设在windows环境下)

import py_compile

py_compile.compile(r'H:\game\test.py')

compile函数原型:

compile(file[, cfile[, dfile[, doraise]]])

file 表示需要编译的py文件的路径

cfile 表示编译后的pyc文件名称和路径,默认为直接在file文件名后加c 或者 o,o表示优化的字节码

dfile 这个参数英文看不明白,请各位大大赐教。(鄙视下自己)原文:it is used as the name of the source file in error messages instead of file

doraise 可以是两个值,True或者False,如果为True,则会引发一个PyCompileError,否则如果编译文件出错,则会有一个错误,默认显示在sys.stderr中,而不会引发异常

(来自python2.5文档)

批量生成pyc文件

一般来说,我们的工程都是在一个目录下的,一般不会说仅仅编译一个py文件而已,而是需要把整个文件夹下的py文件都编译为pyc文件,python又为了我们提供了另一个模块:compileall 。使用方法如下:

import compileall

compileall.compile_dir(r'H:\game')

也可以直接用命令行编译一个目录下的文件,如:# python -m compileall /root/src/

这样就把game目录,以及其子目录下的py文件编译为pyc文件了。嘿嘿,够方便吧。来看下compile_dir函数的说明:

compile_dir(dir[, maxlevels[, ddir[, force[, rx[, quiet]]]]])

dir 表示需要编译的文件夹位置

maxlevels 表示需要递归编译的子目录的层数,默认是10层,即默认会把10层子目录中的py文件编译为pyc

ddir 英文没明白,原文:it is used as the base path from which the filenames used in error messages will be generated。

force 如果为True,则会强制编译为pyc,即使现在的pyc文件是最新的,还会强制编译一次,pyc文件中包含有时间戳,python编译器会根据时间来决定,是否需要重新生成一次pyc文件

rx 表示一个正则表达式,比如可以排除掉不想要的目录,或者只有符合条件的目录才进行编译

quiet 如果为True,则编译后,不会在标准输出中,打印出信息

(来自python2.5文档)

总结

通过上面的方法,可以方便的把py文件编译为pyc文件了,从而可以实现部分的源码隐藏,保证了python做商业化软件时,保证了部分的安全性吧,继续学习下,看怎么修改opcode。

python将py文件编译成二进制文件 加密相关推荐

  1. 什么是pyc文件,把python的py文件编译成pyc文件,把pyc文件反编译成py文件。以及python编译的如何设置不生成pyc文件

    文章目录 1 什么是pyc文件 1.1 什么是pyc文件 1.2 pyc文件是怎么生成的,有什么好处 2 把python的py文件编译成pyc文件 2.1 使用python内置库py_compile把 ...

  2. Python将py文件编译为exe的方法

    使用PyCharm工具写好的Python程序脚本,怎么将.py文件编译为可执行的.exe文件 前提是已经安装了Python环境. 第一步:在PyCharm内下载安装pyinstalle库或使用CMD安 ...

  3. python—auto-py-to-exe—.py文件打包成.exe文件最全最详细(用不同的类别做教程)

    目录 1.打包工具介绍 安装库 2.打包方法 3.例程 (1)只打包py文件,不含有其他资源文件 使用: (2)打包py文件和资源文件(包括文件夹) 1.打包工具介绍 对于打包工具有很多,比如:pyi ...

  4. python 将.py文件打包成.exe文件,将.exe文件还原为.py文件

    打包工具:pyinstaller 安装方法: pip install pyinstaller 打包步骤: 1)cd到需要打包的xxx.py目录下: 2)运行如下命令: pyinstaller (-F) ...

  5. python的py文件打包成exe_将python项目.py文件打包成.exe文件

    安装pyinstaller包 pip3 install pyinstaller 如果不行 pip3 install pyinstaller -i https://pypi.doubanio.com/s ...

  6. python打包成jar包_使用jython将python的py文件打包成java的jar包

    Jython是一种完整的语言,而不是一个Java翻译器或仅仅是一个Python编译器,它是一个Python语言在Java中的完全实现.Jython也有很多从CPython中继承的模块库.最有趣的事情是 ...

  7. Pycharm 中py文件编译成exe文件出现的问题和一个问题解决

    1 pyinstaller 命令和参数: usage: pyinstaller [-h] [-v] [-D] [-F] [--specpath DIR] [-n NAME] [--add-data & ...

  8. 怎么把写好的python代码打包成exe-详解如何将python3.6软件的py文件打包成exe程序...

    在我们完成一个Python项目或一个程序时,希望将Python的py文件打包成在Windows系统下直接可以运行的exe程序.在浏览网上的资料来看,有利用pyinstaller和cx_Freeze进行 ...

  9. python源码只有编译成二进制_【转】Python源代码编译成 pyc pyo

    原文地址 http://blog.csdn.net/sislcb/archive/2009/03/18/4002414.aspx什么是pyc文件 pyc是一种二进制文件,是由py文件经过编译后,生成的 ...

最新文章

  1. Django模板系统
  2. 阿里大鱼.net core 发送短信
  3. 前端一HTML:十五: 权重的比较
  4. 监控程序崩溃重启_第十四章 Homeassistant服务器安全及状态监控(下)
  5. 浅析微信支付:申请退款、退款回调接口、查询退款
  6. MVVM及MVVMLight相关资料
  7. Android开发之高德API篇:2、高德API线路规划
  8. Oracle删除用户与删除表
  9. 图像中的一条直线在旋转缩放过程中会有分段现象,或产生分段节点
  10. 网络存储SAN网络存储术语解释
  11. 第三百三十二节,web爬虫讲解2—Scrapy框架爬虫—Scrapy使用
  12. linux批量创建ftp用户密码,批量在LINUX下建立很多FTP用户
  13. python字体大小设置苹果电脑_如何调整Mac字体大小Mac字体大小调整方法
  14. 深入浅出谈LPWAN物联网通信技术
  15. easyui教程 php,jQuery EasyUI 教程-Panel(面板)
  16. Java中的冒泡排序,Comparator接口和Comparable接口的简单使用
  17. 同城货运主导全新商流体系:智慧物流成胜负关键?
  18. 服务最大的并发量是多少?
  19. echart js导出excel_echarts 导出excel
  20. windows11系统封装教程

热门文章

  1. Qt4_坐标系统变换
  2. 计算机存储T,GB,MB,KB,B,bit
  3. mysql 主从 启动顺序_MySQL生产环境下的主从复制启动项
  4. sql power bi_在SQL,Power BI和MS Excel中计算移动平均值
  5. 解决性能问题中SQL Server警报:SQL Server警报基础
  6. ubuntu 中文设置
  7. atitit.架构设计---方法调用结果使用异常还是返回值
  8. 指针学习4--合成析构函数做了什么
  9. QuantLib 金融计算——随机过程之概述
  10. .net与.net core学习目录