1.Cython 安裝 (將py編譯成pyd,避免反編譯)、pyinstaller 安裝
pip install cython
pip install pyinstaller
2.cython使用
建立編譯腳本
#!/usr/bin/python
# -*- coding: utf-8 -*-
# build_pyd.py
#
# Copyright (C) 2019 - xulong <[email protected]>
#
from distutils.core import setup
from Cython.Build import cythonize
setup(
name = 'any words.....',
ext_modules = cythonize(["HongshangWeixinHelper.py","WeiXin_App_Helper.py",
]
),
)
執行編譯腳本:
python build_pyd.py build_ext --inplace
問題就出在執行腳本這了,因爲 cython 的編譯是 把python腳本轉爲 C++ 代碼,然後用c++編譯器來編譯的,所以前提系統要有c++編譯器可調用。否則會報錯,缺少 vcvarsall.bat 文件。
我安裝了 Visual C++ Build Tools 2015(不想裝ide,太大了,因此後面還要付出很多嘗試),再執行上面命令,報缺少 cl.exe文件,這個應該是找不到路徑問題,找到 cl.exe 所在目錄,把它 加到環境變量 path 裏。後面還會一直報缺少各種 .h 文件,.lib文件,這都是vc++編譯時和鏈接時要用到的頭文件和庫文件。如果是IDE,會在項目裏配置這些的。
找到python的編譯配置文件 C:\Python37\Lib\distutils\msvc9compliler.py 裏面看到,它大概也就是從各地找到相應的文件目錄來組成 編譯命令的。
看它用到了系統的環境變量include 和 lib ,那我這就簡化,把需要的 .h 頭文件的目錄 都加入 include 環境變量,把需要的.lib 目錄都加入 lib 環境變量裏。然後不斷去試,缺了就加就行了。(參考:https://docs.microsoft.com/en-us/cpp/build/setting-the-path-and-environment-variables-for-command-line-builds?view=vs-2017  CL 確實是需要配置相應的環境變量的。)
後面能正常把 py 編譯成 pyd 文件了。 pyd 文件相當於 dll 文件, 使用時在 .py 文件裏把它當模塊引入。
3.使用pyinstaller 打包。
pyinstaller HongshangWeixinHelper.spec
Pyinstaller 有bug ,在處理中文路徑名時有問題。
#HongshangWeixinHelper.spec 文件格式如下:
a = Analysis(['main1.py'],
pathex=[],
binaries=[],
datas=[('icon.ico', '.'),('cacert.pem','.')],
hiddenimports=['wx','xlrd','WeiXin_App_Helper','json','requests','time'], #當用了cython 轉爲pyd模塊裏的引用,不會自動打包進來,需要在這添裏
hookspath=[],
runtime_hooks=[],
excludes=[],
win_no_prefer_redirects=False,
win_private_assemblies=False,
cipher=block_cipher)
pyz = PYZ(a.pure, a.zipped_data,
cipher=block_cipher)
#注: 這種模式是將腳本打包到exe,其它文件做爲單獨文件,供exe調用,形成一個目錄。
exe = EXE(pyz,
a.scripts,
exclude_binaries=True,
name='HongshangWeixinHelper',
debug=False,
strip=False,
upx=True,
console=False )
coll = COLLECT(exe,
a.binaries,
a.zipfiles,
a.datas,
strip=False,
upx=True,
name='wxgzt')
#注: 這種模式是將所有文件打包到exe,exe執行時會釋放其它文件到臨時文件夾,以供調用。
exe = EXE(pyz,
a.scripts,
a.binaries,
a.zipfiles,
a.datas,
name='HongshangWeixinHelper',
debug=False,#True可以看到誤提示
strip=False,
upx=True,
console=False , #True可以看到cosole
icon='icon.ico')
--------------------------------------------------------------------------------------------------------------------------------------------
我的環境變量設置 (只在命令行測試,常用的話還是加至系統環境變量去):
set PATH=%path%;C:\Program Files (x86)\Windows Kits\8.1\Windows Performance Toolkit\;C:\Program Files (x86)\Windows Kits\8.1\bin\x64\;C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\bin\amd64\
set include=C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\include\;C:\Program Files (x86)\Windows Kits\10\Include\10.0.10240.0\ucrt;C:\Program Files (x86)\Windows Kits\8.1\Include\shared\
set lib=C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\lib\amd64\;C:\Program Files (x86)\Windows Kits\8.1\Lib\winv6.3\um\x64;C:\Program Files (x86)\Windows Kits\10\Lib\10.0.10240.0\ucrt\x64\
我的python版本:
D:\2.DEVELOP\python\HongshangWeixinHelper.py3>python
Python 3.7.3 (v3.7.3:ef4ec6ed12, Mar 25 2019, 22:22:05) [MSC v.1916 64 bit (AMD64)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>>
MacOS 下安裝:
直接用 pyenv 裝 python
env PYTHON_CONFIGURE_OPTS="--enable-framework" pyenv install 3.8.0
cython 和 pyinstaller 在相應的虛擬環境下直接用 pip install
PS: mac pyenv install python 時一定要加上 env PYTHON_CONFIGURE_OPTS="--enable-framework", 否則會有很多坑,pyinstall可能打包了就是不能運行, wxpython 應用下面報錯
This program needs access to the screen. Please run with a
Framework build of python, and only when you are logged in
on the main display of your Mac.
國內的幾個Python鏡像下載地址:
https://pypi.tuna.tsinghua.edu.cn/simple
http://mirrors.aliyun.com/pypi/simple/
http://pypi.douban.com/simple/
https://mirrors.ustc.edu.cn/pypi/web/simple/
使用pip通過鏡像安裝第三方庫的方法:
pip install -i https://pypi.tuna.tsinghua.edu.cn/simple pyinstaller