网上说的将python代码,通过Cython打包成pyd的教程挺多,好处也多,主要有两个:

1.隐藏代码

2.加速运行速度

补充两点:

1.打包脚本配置

__build__.py

 from distutils.core import setup
from Cython.Build import cythonize
import filemanager, os filelist = []
folders = [".\\"] # ".\\utils",
excludes = [ "__init__", "__build__", "u3dNameRes" ] for rootpath in folders: alllist = filemanager.getFileList(rootpath, ".py")
for file in alllist:
if not any(ex in file for ex in excludes):
filelist.append(file) setup(
name = 'any words.....',
ext_modules = cythonize(filelist, compiler_directives = {'language_level': 2}),
)

filemanager.getFileList 是工具类,用来获取某目录下,指定后缀的文件列表

make.bat

 @echo off
set libname=u3dnamedres
rem if exist build ( rd build /s /q )
python __build__.py build_ext --inplace
xcopy %libname% .\ /s /e /y
rd %libname% /s /q
pyinstaller -F u3dNameRes.py
del *.pyd /s /q
del *.c /s /q

第4行是生成pyd文件

这里有个特别要注意的点,就是不同目录下的py文件,一定要在目录下加上__init__.py,然后在里面引用你的py文件。

引用的路径只需要写到模块下的目录,不要把模块的名字也加到最前面去。

不然,等会生成的pyd文件会变成在根目录下,导致编译exe的时候,找不到pyd文件。这点非常重要。

2.加载的两种方式

1)直接引用

直接引用就是跟平时写代码的一样,直接import .... 或者是 from xxxx import .... 又或者是import xxxx as yyy即可

2)外部加载

获取查找文件的方式,并配合pkgutil.iter_modules,把pyd加载到内存里面。

 def loadpys(dirs):
if isinstance(dirs, str):
dirs = [dirs] if os.getcwd() not in sys.path:
sys.path.append(os.getcwd())
for path in dirs:
prefix = path + "."
roots = [ "%s%s%s" % (p, os.sep, path) for p in sys.path]
for _importer, modname, _ispkg in pkgutil.iter_modules(roots, prefix):
try:
if _ispkg:
module = __import__(modname, fromlist = ["__init__"])
else:
module = __import__(modname, fromlist = True)
except Exception as e:
raise Exception("import failed %s" % modname)
else:
yield module, modname

这方法同样适用于加载exe外部的pyd文件。

另外,如果说是外部加载的pyd,要在pyinstaller打包的时候,也打进exe的话,需要进行以下步骤:

1.先跑一遍pyinstaller -F xxxx.py,生成 xxxx.spec

2.然后修改xxxx.spec,把要打包进去的pyd文件,添加到配置datas=[('*.pyd', '.\\proxy\\')]

3.然后再生成打包,用命令 pyinstaller -F xxxx.spec

pyd打包补充的更多相关文章

  1. 从零学习Fluter(七):Flutter打包apk详解

    写一个win上 flutter 打包apk的教程 这篇文档介绍一下flutter打包发布正式版apk 整体来看,和命令行打包rn的方法相差不大 打包前先做检查工作&查看构建配置 Android ...

  2. maven---->配置,指令,插件,使用

    maven是用于java的自动化构建工具. 1.下载:http://maven.apache.org/download.cgi 下载下面截图标红处的文件 然后直接解压可以得到文件夹,得到如下文件夹 不 ...

  3. java打包项目将配置文件放在包外面(后续还会有补充)

    项目中也经常单独将一部分功能独立做Java Project,然后打成jar包供其他项目调用.如果jar包中需要读取配置文件信息,则很少把该配置打进jar包,因为它不方便修改,更多都是采用jar包读取外 ...

  4. 对《将Unreal4打包后的工程嵌入到Qt或者桌面中》一文的补充

    在上一文中本人尝试将Ue4嵌入到Qt中,但依然有一些问题没有去尝试解决.今天因为帮助知乎专栏作者@大钊的关系,顺便进行补完. 2018.7.18更新: 正好在参加杭州UnrealCircle的时候见到 ...

  5. Gradle 实现 Android 多渠道定制化打包

    Gradle 实现 Android 多渠道定制化打包 版权声明:本文为博主原创文章,未经博主允许不得转载. 最近在项目中遇到需要实现 Apk 多渠道.定制化打包, Google .百度查找了一些资料, ...

  6. Android studio 自定义打包apk名

    Android Studio打包应用默认生成的apk名称是:app-release.apk .如果我们要让生成的apk名跟我们版本包名有联系的话,那我们就要自定义生成的apk名了 需要在build.g ...

  7. 模块化管理工具兼打包工具 webpack

    webpack 是一个[模块化管理工具]兼[打包工具] 是一个工具(和seajs,requirejs管理前端模块的方式是不一样) 在webpack一个文件就是一个模块! seajs,requirejs ...

  8. Docker学习笔记第一章:补充

    只记得学习后面的命令,忘记整理一些概念性的东西了,只能做个补充了=.= Docker虽然也是一种虚拟技术,但是不同于虚拟机的概念.Docker是一种以容器为主的技术,容器运行不需要模拟层(emulat ...

  9. 关于war包 jar包 ear包 及打包方法

    关于war包 jar包 ear包 及打包方法 war包:是做好一个web应用后,通常是网站打成包部署到容器中 jar包:通常是开发的时候要引用的通用类,打成包便于存放管理. ear包:企业级应用 通常 ...

随机推荐

  1. Vue+Iview+Node 安装环境 运行测试Vue

    1.运行环境及设置 备注:建议设置 npm config set registry https://registry.npm.taobao.org 2.全局安装vue/cli 3.创建vue 项目 v ...

  2. 小程序唤起App

    小程序[打开App]官方文档 微信开放平台 App分享小程序IOS开发 App分享小程序Android开发

  3. 获取一个数组(vector)与查找值(value)的差最小绝对值的成员索引的算法

    代码如下: 函数作用:传递进来一个数组(vector),和一个需要查找的值(value),返回与value的差值绝对值最小的vector成员索引,若value不在vector范围中,则返回-1: in ...

  4. Git合并时遇到冲突或错误后取消合并

    当合并分支时遇到错误或者冲突,分支旁边会多出“|MERGING”这个东西 有这个状态存在时,会导致后面想要再合并的时候提示如下 所以需要先取消这次合并,使用“git merge --abort”命令

  5. HYNB Contest 7:2017 Asia HCMC Vietnam National Programming Contest

    A. Another Query on Array Problem B. Board Covering C. Cumulative Sums 题意 \(A_1=1,A_i=A_{i-1}+sod(A_ ...

  6. 使用CEfSharp之旅(6)拦截网络请求 截取response返回

    原文:使用CEfSharp之旅(6)拦截网络请求 截取response返回 版权声明:本文为博主原创文章,未经博主允许不得转载.可点击关注博主 ,不明白的进群191065815 我的群里问 https ...

  7. CentOS7-Minimal安装MySQL服务

    CentOS7默认安装的是Mariadb而不是mysql,而Mariadb是mysql的一个分支, 安装mysql会覆盖Mariadb 一.下载MySQL官方的 Yum Repository [roo ...

  8. U-BOOT 对 Nand Flash 命令的支持

    U-BOOT 对 Nand Flash 命令的支持 在 U­BOOT 下对 Nand Flash 的支持主要是在命令行下实现对 nand flash 的操作.对 nand flash 实现的命令 为: ...

  9. 「题解」:07.18NOIP模拟赛T1:星际旅行

    问题 A: 星际旅行 时间限制: 1 Sec  内存限制: 256 MB 题面 题面谢绝公开. 考试心路历程 拿到这道题感觉很懵逼,所以先搞的T2和T3,最后码了个暴力,结果还不如直接输出‘0’得分高 ...

  10. 国内平台比特币(Bitcoin)搬砖流程教学

    建议搬砖时要的价差,实际费用与利润请自行计算,避免亏损或白做工请自行拿捏利润. 请搬砖前要先自行操作与确认双边平台的存取速度.利於拿捏时间,避免时间差导致亏损. (所有内容 仅供参考 盈亏自负) 搬砖 ...