1. 程式人生 > >Window下:自帶python編輯器的wxpython專案釋出打包exe

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

這裡給一個詳細點的參考網址