python compileall 打包发布
Python工程的编译、合并、打包、发布
from:https://my.oschina.net/bfbd/blog/864310
确保要发布的包(demo)的根目录中有__main__.py文件,这个是程序执行入口。
编译
python3 -O -m compileall demo
批量改名.pyc文件
find . -name '*.pyc' -exec rename 's/.cpython-35.opt-1//' {} \;
移动.pyc文件
find . -name '*.pyc' -execdir mv {} .. \;
清理.py文件
find . -name '*.py' -type f -print -exec rm {} \;
清理__pycache__文件夹
find . -name '__pycache__' -exec rmdir {} \;
打包成zip
zip -r pub.zip ./demo/*
运行时只要将zip文件作为参数即可
python3 pub.zip
最终整合脚本
cd $1
python3 -O -m compileall .
find . -name '*.pyc' -exec rename 's/.cpython-35.opt-1//' {} \;
find . -name '*.pyc' -execdir mv {} .. \;
find . -name '*.py' -type f -print -exec rm {} \;
find . -name '__pycache__' -exec rmdir {} \;
zip -r ../$1.zip ./*
调用方式
chmod +x pycompile.sh
./pycompile.sh demo
Python代码的编译
from:http://www.cnblogs.com/zhangzl419/p/7116158.html
Python代码的编译
Python代码在解释执行之前,是会被编译成.pyc或者.pyo文件的,它们是中间字节码表示的文件,之后Python虚拟机才会去解释执行它们。
1、pyc文件
=========
pyc是一种二进制文件,是由py文件经过编译后,生成的文件,是一种byte code,py文件变成pyc文件后,加载的速度有所提高。
而且pyc是一种跨平台的字节码,是由python的虚拟机来执行的,这个是类似于JAVA或者.NET的虚拟机的概念。
pyc的内容,是跟python的版本相关的,不同版本编译后的pyc文件是不同的。
2、pyo文件
==========
pyo是优化编译后的程序 python -O 源文件即可将源程序编译为pyo文件。
3、把单个文件编译成pyc
====================
用如下代码
import py_compile
py_compile.compile(r'H:\game\test.py')
或者
python -m py_compile test.py
这样会在test.py文件所在的目录下,生成一个__pycache__(注意:这里目录名前后有两个下划线)的目录,并且其中存有一个test.cpython-35.pyc文件,这个pyc文件就是test.py编译之后生成的文件。
4、把一个目录下所有python源文件编译pyc
===================================
一般来说,我们的工程都是在一个目录下的,一般不会说仅仅编译一个py文件而已,而是需要把整个文件夹下的py文件都编译为pyc文件,python又为了我们提供了另一个模块:compileall 。使用方法如下:
import compileall
compileall.compile_dir(r'/root/src')
也可以直接用命令行编译一个目录下的文件
python -m compileall /root/src/
这样就会在/root/src目录下生成一个新的目录__pycache__,这个目录的下面会存放所有的和python源代码对应的pyc文件
比如源代码目录结构如下
/root/src
|---test.py
|---test2.py
|---test3.py
编译后目录结构会变成如下:
/root/src
|---test.py
|---test2.py
|---test3.py
|---__pycache__
|----test.cpython-35.pyc
|----test2.cpython-35.pyc
|----test3.cpython-35.pyc
以上就是Python编译的基本知识。
注意:
compileall.
compile_path
(skip_curdir=True, maxlevels=0, force=False, quiet=0, legacy=False, optimize=-1)
字节编译沿 sys.path
找到的所有 .py
文件。如果所有文件都已成功编译,则返回true值,否则返回false值。
如果 skip_curdir 为true(默认值),则当前目录不包括在搜索中。所有其他参数传递到 compile_dir()
函数。注意,与其他编译函数不同,maxlevels
默认为 0
。
在 3.2 版更改: 添加了 legacy 和 optimize 参数。
在 3.5 版更改: quiet 参数更改为多级值。
在 3.5 版更改: legacy 参数只写出 .pyc
文件,而不是 .pyo
文件,无论 optimize 的值是什么。
python compileall 打包发布的更多相关文章
- [转]Python依赖打包发布详细
Python依赖打包发布详细 http://www.cnblogs.com/mywolrd/p/4756005.html 将Python脚本打包成可执行文件 Python是一个脚本语言,被解释 ...
- [Python] 项目打包发布
一.setuptools - 官方文档: Building and Distributing Packages with Setuptools- 中文文档: Python包管理工具setuptools ...
- Python依赖打包发布详细
http://www.cnblogs.com/mywolrd/p/4756005.html 将Python脚本打包成可执行文件 Python是一个脚本语言,被解释器解释执行.它的发布方式: .py ...
- 利用pyinstaller将python脚本打包发布
之前写了一个小工具,将excel配置表转换为json.xml.lua等配置文件.最近在学习egret,正好需要转换配置文件,刚好就用上了.然而当我想把工具拷到工作目录时,就发愁了.之前我为了方便扩展, ...
- python代码打包发布
背景 本文介绍了python中一种最简单的代码结构的打包方式 包名称 我们先给我们的包取个名字,python包起名需要符合下面的规范 全部小写 在pypi上是唯一的 下划线分隔或没有单词分隔符(不要使 ...
- python文件打包发布(引用的包也可以加进来),打包出错解决了,运行出错解决了
一开始,我以为,打包本来就很容易,可是没有..... 没想到打包还能遇到坑 T.T 打包步骤: 1.安装 pyinstaller (cmd) pip install pyinstaller 2.进入目 ...
- python之打包、发布模块
一.python中针对于写好的模块,并且比人也可以使用改模块,这样就可以以同意的打出来,让别人安装或者赋值过后可以更好的使用以及集成. 二.最近在学习python所以这里主要是记录一下python的打 ...
- Python学习手册之__main__ 模块,常用第三方模块和打包发布
在上一篇文章中,我们介绍了 Python 的 元组拆包.三元运算符和对 Python 的 else 语句进行了深入讲解,现在我们介绍 Python 的 __main__ 模块.常用第三方模块和打包发布 ...
- 如何打包发布加密的 Python 源代码
这里介绍一种使用 PyInstaller 和 PyArmor 来发布加密 Python 源代码的方式,能够达到以下目的 把所有 Python 源代码打包成为可执行文件,客户不需要 Python 就可以 ...
随机推荐
- OO第三次作业总结(JML)
第三单元的课题是JML, 即java建模语言.JML是一种描述接的语言.通过前置条件和后置条件,描述一个模块的行为.本单元我们扮演一个项目中的一员,完成自己的一小部分工作,最终实现整个项目.而限制我们 ...
- NYOJ-673悟空的难题~~水题~~
悟空的难题 时间限制:1000 ms | 内存限制:65535 KB 难度:2 描述 自从悟空当上了齐天大圣,花果山上的猴子猴孙们便也可以尝到天上的各种仙果神酒,所以猴子猴孙们的体质也得到了很好的 ...
- iOS第三方语音-微信语音
网址链接:http://pr.weixin.qq.com/ 里面包含了微信语音和图像,集成很简单,下载方demo后会有个文档,按照流程来(因为它只提供了真机的.a文件,所以只能用真机哦,不然会报错) ...
- 1027 stl
#include<stdio.h> #include<queue> using namespace std; int main() { int i,n,m,j,k,a[100 ...
- 怎样检查Android网络连接状态
在发送任何HTTP请求前最好检查下网络连接状态,这样可以避免异常.这个教程将会介绍怎样在你的应用中检测网络连接状态. 创建新的项目 1.在Eclipse IDE中创建一个新的项目并把填入必须的信息. ...
- 下载整个网页的方法,包括样式、图片、和js
扒别人网站,不一定是要干邪恶的事(当然也有干的).有时候我们看到别人网站的功能很酷,想要自己试着实现一下.我们就需要扒一下这个页面,一方面可以线下修改学习,另一方面不会浪费时间在设计页面上,可以更关心 ...
- Hihocoder #1067 : 最近公共祖先·二
时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 上上回说到,小Hi和小Ho用非常拙劣——或者说粗糙的手段山寨出了一个神奇的网站,这个网站可以计算出某两个人的所有共同祖先中 ...
- PatentTips - Solid State Memory Wear Leveling
BACKGROUND OF THE INVENTION Solid-state memory devices encompass rewritable non-volatile memory devi ...
- iOS - 设置系统类似的方法弃用警告的方式
在开发过程中,调用系统方法时,经常可以看xCode 提示 该方法已弃用,如下图: 觉得特别炫,查一下资料,如果自己也想实现如下的效果,只需要采用系统的如下几个关键字加在方法名后面就可以了: NS_DE ...
- wordpress优化:Gravatar头像被墙及解决方案
网站缓存现象: 打开网站是左下角出现0.gravatar.com.1.gravatar.com或2.gravatar.com字样,网站一直处于缓存状态,迟迟未能打开.很多人都会缺乏耐心地等待一个网页的 ...