Window下:自带python编辑器的wxpython项目发布打包exe

最后更新“2018-10-17”

环境:w764 Pyinstaller3.1.1 Python2.7.15 wxPython2.9.1 matplotlib2.2.3

加密方式有两种,一种是使用pyinstaller与pyexe等工具进行打包生成exe,一种是将py转成pyc进行保护。

由于使用过Pyinstaller进行打包的PYQT项目,优先使用pyinstaller进行打包,网上py2exe方式的经验也比较多,首先进行Pyinstaller的尝试。

Pyinstaller

由于本来项目是开源的,给出的是源码加Python2.7.2版本的Python。这里重新安装了wxpython,但是wxpython新版本与旧版本是不兼容的,pip无法安装wxpython2.8版本,只能去wxpython官网下载2.9的exe进行覆盖安装。同样的numpy是由matplotlib提供的,最新的只支持python3.5及以上,只能下载指定版本(2.2.3对应的wxpython只能是2.9及以上)等

安装Pyinstaller,python2版本的首字母是小写的

pip install pyinstaller

进行打包

pyinstaller -F main.py

打包成功,将一些静态的图片与其他所需的文件放在main.exe同级目录下。运行:

问题:路径错误,到一个其他路径去找程序所需的文件,好多要修改的。

------------------------------------------------------------------------------------------------------------------------------------------------------------

------------------------------------------------------------------------------------------------------------------------------------------------------------

由于自带编辑器,直接python.exe main.py的形式进行调用执行,采用将文件加密的方式更加简单,易于升级维护。

PYC方式
pyc是什么?就是.py编译后的结果c:compile。

生成方式:

python -m foo.py

或者:

import py_compile
py_compile.compile('foo.py')

一键生成该文件夹下所以py的pyc版本:

import compileall
compileall.compile_dir(r'/path')

然后把.py删除,直接python main.pyc即可。不是专业人士是不太可能解密的。但是安全性还不是很高,所以还有一种pyd的做法:

pyd

.pyd文件本质就是window下的dll库一样的存在,他将一个python文件转成.c中间件,然后将.c文件编译成.pyd库文件,使用上与pyc一样可以导入,当做.py使用。

基础步骤如下:

1.添加文件c:\Python27\Lib\distutils\distutils.cfg:
内容为:
[build] 
compiler = msvc
2. pip install Cython :下载不成功就去官网下载.whl
3.安装VCForPYthon27.msi然后将Lib/distutils/msvc9compiler.py文件中的find_vcvarsall函数直接返回:
def find_vcvarsall(version):
    """Find the vcvarsall.bat file

    At first it tries to find the productdir of VS 2008 in the registry. If
    that fails it falls back to the VS90COMNTOOLS env var.
    """
    return r'C:\Users\Administrator\AppData\Local\Programs\Common\Microsoft\Visual C++ for Python\9.0\vcvarsall.bat'
    vsbase = VS_BASE % version 。。。。

然后创建一个简单的脚本setup.py:

from distutils.core import setup
from Cython.Build import cythonize
 
setup(
  name = 'Hello world app',
  ext_modules = cythonize("dll.py"),
)

最后一步生成:

python setup.py build_ext --inplace

这里给一个详细点的参考网址

 

  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值