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 
#

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 里面看到,它大概也就是从各地找到相应的文件目录来组成 编译命令的。

win7+Python3.7+Cython +pyinstaller 打包方法_第1张图片

看它用到了系统的环境变量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 确实是需要配置相应的环境变量的。

win7+Python3.7+Cython +pyinstaller 打包方法_第2张图片

 

后面能正常把 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

你可能感兴趣的:(Python,c++)