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=Truemaxlevels=0force=Falsequiet=0legacy=Falseoptimize=-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 打包发布的更多相关文章

  1. [转]Python依赖打包发布详细

    Python依赖打包发布详细   http://www.cnblogs.com/mywolrd/p/4756005.html 将Python脚本打包成可执行文件   Python是一个脚本语言,被解释 ...

  2. [Python] 项目打包发布

    一.setuptools - 官方文档: Building and Distributing Packages with Setuptools- 中文文档: Python包管理工具setuptools ...

  3. Python依赖打包发布详细

    http://www.cnblogs.com/mywolrd/p/4756005.html 将Python脚本打包成可执行文件   Python是一个脚本语言,被解释器解释执行.它的发布方式: .py ...

  4. 利用pyinstaller将python脚本打包发布

    之前写了一个小工具,将excel配置表转换为json.xml.lua等配置文件.最近在学习egret,正好需要转换配置文件,刚好就用上了.然而当我想把工具拷到工作目录时,就发愁了.之前我为了方便扩展, ...

  5. python代码打包发布

    背景 本文介绍了python中一种最简单的代码结构的打包方式 包名称 我们先给我们的包取个名字,python包起名需要符合下面的规范 全部小写 在pypi上是唯一的 下划线分隔或没有单词分隔符(不要使 ...

  6. python文件打包发布(引用的包也可以加进来),打包出错解决了,运行出错解决了

    一开始,我以为,打包本来就很容易,可是没有..... 没想到打包还能遇到坑 T.T 打包步骤: 1.安装 pyinstaller (cmd) pip install pyinstaller 2.进入目 ...

  7. python之打包、发布模块

    一.python中针对于写好的模块,并且比人也可以使用改模块,这样就可以以同意的打出来,让别人安装或者赋值过后可以更好的使用以及集成. 二.最近在学习python所以这里主要是记录一下python的打 ...

  8. Python学习手册之__main__ 模块,常用第三方模块和打包发布

    在上一篇文章中,我们介绍了 Python 的 元组拆包.三元运算符和对 Python 的 else 语句进行了深入讲解,现在我们介绍 Python 的 __main__ 模块.常用第三方模块和打包发布 ...

  9. 如何打包发布加密的 Python 源代码

    这里介绍一种使用 PyInstaller 和 PyArmor 来发布加密 Python 源代码的方式,能够达到以下目的 把所有 Python 源代码打包成为可执行文件,客户不需要 Python 就可以 ...

随机推荐

  1. python002 Python3 基础语法

    python002 Python3 基础语法 编码默认情况下,Python 3 源码文件以 UTF-8 编码,所有字符串都是 unicode 字符串. 当然你也可以为源码文件指定不同的编码: # -* ...

  2. 一份关于webpack2和模块打包的新手指南(二)

    插件 我们已经看到一个内置的webpack插件的例子,在npm run build脚本中调用的webpack -p命令就是使用webpack附带的UglifyJsPlugin插件以生产模式压缩打包文件 ...

  3. 免费SSL申请

    https://letsencrypt.org/ https://letsencrypt.org/docs/client-options/ ACMESharp (.NET, PowerShell) w ...

  4. [Bzoj1022][SHOI2008]小约翰的游戏John(博弈论)

    1022: [SHOI2008]小约翰的游戏John Time Limit: 1 Sec  Memory Limit: 162 MBSubmit: 2976  Solved: 1894[Submit] ...

  5. 学习日常笔记<day15>mysql基础

    1.数据库入门 1.1数据库软件 数据库:俗称数据的仓库,方便管理数据的软件(或程序) 1.2市面上数据库软件 Oracle,甲骨文公司的产品. 当前最流行应用最广泛的数据库软件.和java语言兼容非 ...

  6. N+6 裁员裁出幸福感的背后

    01. 史上最牛逼的数据库公司,Oracle 裁员了. 2019年5月7日,甲骨文召开了面向全中国区的电话会议,亚太区人力资源负责人在会上简要介绍道,公司正进行业务结构调整,导致一部分人要离开岗位,这 ...

  7. struts2 动态工作流

    话不多说,直接贴代码: public class TestAction { private String nextPage;//保存下一步内容的属性 public String destroy(){ ...

  8. HDU 1588 Gauss Fibonacci(矩阵高速幂+二分等比序列求和)

    HDU 1588 Gauss Fibonacci(矩阵高速幂+二分等比序列求和) ACM 题目地址:HDU 1588 Gauss Fibonacci 题意:  g(i)=k*i+b;i为变量.  给出 ...

  9. O2O助汪峰成功逆袭,汪峰最终上头条了

    8月2日七夕情人节,汪峰<峰暴来临>演唱会在鸟巢10万人体育场唱响,各大报纸.站点娱乐板块并没有等来汪峰向国际章求婚的"头条",只是,与乐视合作现场演出+付费直播的O2 ...

  10. 在DIV中自己主动换行

    word-break:break-all和word-wrap:break-word都是能使其容器如DIV的内容自己主动换行. 它们的差别就在于: 1,word-break:break-all 比如di ...