网站建设资讯

NEWS

网站建设资讯

函数打包python,c语言打包函数

将python打包成exe

return 应该放在一个函数里面的,

创新互联成立于2013年,先为赛罕等服务建站,赛罕等地企业,进行企业商务咨询服务。为赛罕企业网站制作PC+手机+微官网三网同步一站式服务解决您的所有建站问题。

将python打包成exe的程序有很多,比如py2exe、PyInstaller等等,但是到目前为止,它们对python3.1支持的都不好,所以这里我要介绍一下cx_freeze 4.2.2,它还能支持跨平台,可以在windows和linux运行。

cx_freeze的下载网址为 ,要根据已安装的python版本进行选择。比如我使用的是python3.1,所以就要下载cx_Freeze-4.2.2.win32-py3.1.msi这个文件。运行这个安装包后,相关程序就会被拷贝到python的目录下。主要在两个地方,一个是C:/Python31/Scripts,另一个是C:/Python31/Lib/site-packages/cx_Freeze

在以前版本的cx_Freeze中,是通过FreezePython.py这个脚本将py转换为exe,而在4.2.2这个版本中,FreezePython.py已经不见了,主要的工作交给了C:/Python31/Scripts下的cxfreeze.bat来完成。

使用cx_Freeze完成python打包exe主要有两种方法:

第一种,直接运行cxfreeze.bat通过:

先进入cmd命令行,进入C:/Python31/Scripts目录,然后运行cxfreeze.bat -h 就可以看到它的使用说明了。我们可以用cx_freeze自己的sample做个试验。

进入到c:/python31/scripts/下,运行

cxfreeze C:/Python31/Lib/site-packages/cx_Freeze/samples/PyQt4/PyQt4app.py --install-dir=d:/123

pytqt4app.py就会被打包成exe,并且它所用到的库文件,也被一并考到了d:/123目录下。

python zip函数的用法

定义:zip([iterable,

...])

zip()是Python的一个内建函数,它接受一系列可迭代的对象作为参数,将对象中对应的元素打包成一个个tuple(元组),然后返回由这些

tuples组成的list(列表)。若传入参数的长度不等,则返回list的长度和参数中长度最短的对象相同。利用*号操作符,可以将list

unzip(解压),看下面的例子就明白了:

1

2

3

4

5

6

7

8

9

a

=

[1,2,3]

b

=

[4,5,6]

c

=

[4,5,6,7,8]

zipped

=

zip(a,b)

[(1,

4),

(2,

5),

(3,

6)]

zip(a,c)

[(1,

4),

(2,

5),

(3,

6)]

zip(*zipped)

[(1,

2,

3),

(4,

5,

6)]

对于这个并不是很常用函数,下面举几个例子说明它的用法:

*

二维矩阵变换(矩阵的行列互换)

比如我们有一个由列表描述的二维矩阵

a

=

[[1,

2,

3],

[4,

5,

6],

[7,

8,

9]]

通过python列表推导的方法,我们也能轻易完成这个任务

1

2

print

[

[row[col]

for

row

in

a]

for

col

in

range(len(a[0]))]

[[1,

4,

7],

[2,

5,

8],

[3,

6,

9]]

另外一种让人困惑的方法就是利用zip函数:

1

2

3

4

5

a

=

[[1,

2,

3],

[4,

5,

6],

[7,

8,

9]]

zip(*a)

[(1,

4,

7),

(2,

5,

8),

(3,

6,

9)]

map(list,zip(*a))

[[1,

4,

7],

[2,

5,

8],

[3,

6,

9]]

这种方法速度更快但也更难以理解,将list看成tuple解压,恰好得到我们“行列互换”的效果,再通过对每个元素应用list()函数,将tuple转换为list

*

以指定概率获取元素

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

import

random

def

random_pick(seq,probabilities):

x

=

random.uniform(0,

1)

cumulative_probability

=

0.0

for

item,

item_probability

in

zip(seq,

probabilities):

cumulative_probability

+=

item_probability

if

x

cumulative_probability:

break

return

item

for

i

in

range(15):

random_pick("abc",[0.1,0.3,0.6])

'c'

'b'

'c'

'c'

'a'

'b'

'c'

'c'

'c'

'a'

'b'

'b'

'c'

'a'

'c'

这个函数有个限制,指定概率的列表必须和元素一一对应,而且和为1,否则这个函数可能不能像预想的那样工作。

稍微解释下,先利用random.uniform()函数生成一个0-1之间的随机数并复制给x,利用zip()函数将元素和他对应的概率打包成tuple,然后将每个元素的概率进行叠加,直到和大于x终止循环

这样,”a”被选中的概率就是x取值位于0-0.1的概率,同理”b”为0.1-0.4,”c”为0.4-1.0,假设x是在0-1之间平均取值的,显然我们的目的已经达到

Python程序代码混淆、编译、打包、运行(桌面程序防破解向)

像Python这种解释性的语言,要想私有化部署的同时又保护好源码,就像是对于鱼和熊掌的追求。

虽然做不到尽善尽美,但是对代码进行混淆,增加一点破解的难度,或许能规避一些泄露的风险。

本次演示环境:linux

确保要发布的包根目录("demo")中有__main__.py文件,这个是程序执行入口。

编译

批量改名.pyc文件

移动.pyc文件

清理.py文件

清理__pycache__文件夹

打包成zip

运行时只要将zip文件作为参数即可

最终整合脚本

调用方式

对于在变量和函数名上的混淆有点小儿科,而对于跨文件的类名的混淆又太容易实现。

所以对于混淆程度的取舍,要视工程的规模而定。

2.1 混淆工具pyminifier

在原来的工具 pyminifier上修复了几个bug。

安装:

python3 安装

或者clone下来,自行安装

使用例子

2.2 源码变更

不同的配置对于源码的要求不同,以下是笔者踩过的坑。

其他混淆想法

结合混淆、编译和打包,尝试出以下发布脚本。

主要的思路 :创建一个工作目录tmp,然后在此目录下混淆、编译python代码,完成后把内容打包成pyc文件,再将pyc文件和其他配置文件移动到dist,发布dist即可。

混淆的目的是最大程度保护源码,在发布到客户端后不被轻易破解。

qt中如何解包利用python 的struct.pack()函数打包的数据

在Python中使用struct模块打包数据和在C/C++语言中定义一个结构体(也是把多个成员打包到一块)差不多。

只要客户端告诉了你打包的数据的格式(比如:数据包的总长度、数据包中各个数据域的长度及类型,以及端序——大端还是小端),然后定义一个等价的C语言结构体,并把接收到的数据放入一个这样的结构体变量(对象)中就完成了解包工作。然后,访问结构体中的特定成员,就是访问传送过来的特定数据了。


分享名称:函数打包python,c语言打包函数
文章起源:http://njwzjz.com/article/dschjpc.html