win7+Python3.7+Cython +pyinstaller 打包方法

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&nbsp     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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章