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 就可以 ...
随机推荐
- jenkins里跑selenium webdriver,Chrome浏览器不能打开&&unknown error: unable to discover open pages
在windows的cmd里面执行 “python test.py”,毫无问题,浏览器正常打开,测试结果也正常. 问题: 但如果是在jenkins里,选择 “execute windows batch ...
- python和shell获取命令行参数的区别
一.命令行参数的取得对于一些功能性的脚本来说非常有用,不至于将功能写死在脚本中. shell的命令行参数直接用 $ 1,$2 等就可以直接获取 其中 $1 表示 第二个参数,即命令行的第一个参数,因为 ...
- Laya 类列表加载优化
Laya 类列表加载优化 @author ixenos 类列表:在一个页面展示的大量的零散单元的集合(聊天面板.背包) 一.按展示优化1.展示内容少,即使大量数据,但用户只看到少量信息的时候,考虑按需 ...
- hdu 1501 基本搜索深搜
#include<stdio.h> #include<string.h> char s1[300],s2[300],s[500]; int len1,len2,len3,fla ...
- 关于NSArray的去重
提到去重,第一反应就是for或while循环来遍历处理. 然后有了几种思路: 1) 两个循环嵌套 对比 然后去重: 但是这种方法会数据丢失, arr为要去重的数组 ; i<arr.count; ...
- CodeForces - 462B Appleman and Card Game
是一道简单题 将字母从个数多到小排序 然后 再按题目算法得到最多 但是注意 数据类型声明 money要为long long #include <iostream> #include < ...
- unbuntu下安装多个JAVA JDK版本及如何切换
当前环境已经安装过jdk1.6.0_45安装JDK 1.7.x时,若安装错误,可执行以下步骤:sudo add-apt-repository ppa:openjdk-r/ppa sudo apt-ge ...
- Solr Admin管理界面使用说明
Notice:本说明基于Solr6.4.2. 本文讨论的是如何使用Solr Admin UI. 一级菜单 图1.SolrCloud模式 图2.单机Solr模式 Logging:展示Solr的日志,不用 ...
- java HashMap的使用
java HashMap的使用 import java.util.HashMap; import java.util.Iterator; public class WpsklHashMap { pub ...
- HDU 1896 【留个使用priority_queue容器的样例】
感谢<啊哈!算法>的讲解,水鸟弄懂了什么是优先队列. 题意是:在路上有很多石子,给出他们的初始位置和小明能够将他们扔出的距离,当小明遇到奇数个石子的时候就会把它扔出,遇到偶数个就会忽略他, ...