pyd打包补充
网上说的将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打包补充的更多相关文章
- 从零学习Fluter(七):Flutter打包apk详解
写一个win上 flutter 打包apk的教程 这篇文档介绍一下flutter打包发布正式版apk 整体来看,和命令行打包rn的方法相差不大 打包前先做检查工作&查看构建配置 Android ...
- maven---->配置,指令,插件,使用
maven是用于java的自动化构建工具. 1.下载:http://maven.apache.org/download.cgi 下载下面截图标红处的文件 然后直接解压可以得到文件夹,得到如下文件夹 不 ...
- java打包项目将配置文件放在包外面(后续还会有补充)
项目中也经常单独将一部分功能独立做Java Project,然后打成jar包供其他项目调用.如果jar包中需要读取配置文件信息,则很少把该配置打进jar包,因为它不方便修改,更多都是采用jar包读取外 ...
- 对《将Unreal4打包后的工程嵌入到Qt或者桌面中》一文的补充
在上一文中本人尝试将Ue4嵌入到Qt中,但依然有一些问题没有去尝试解决.今天因为帮助知乎专栏作者@大钊的关系,顺便进行补完. 2018.7.18更新: 正好在参加杭州UnrealCircle的时候见到 ...
- Gradle 实现 Android 多渠道定制化打包
Gradle 实现 Android 多渠道定制化打包 版权声明:本文为博主原创文章,未经博主允许不得转载. 最近在项目中遇到需要实现 Apk 多渠道.定制化打包, Google .百度查找了一些资料, ...
- Android studio 自定义打包apk名
Android Studio打包应用默认生成的apk名称是:app-release.apk .如果我们要让生成的apk名跟我们版本包名有联系的话,那我们就要自定义生成的apk名了 需要在build.g ...
- 模块化管理工具兼打包工具 webpack
webpack 是一个[模块化管理工具]兼[打包工具] 是一个工具(和seajs,requirejs管理前端模块的方式是不一样) 在webpack一个文件就是一个模块! seajs,requirejs ...
- Docker学习笔记第一章:补充
只记得学习后面的命令,忘记整理一些概念性的东西了,只能做个补充了=.= Docker虽然也是一种虚拟技术,但是不同于虚拟机的概念.Docker是一种以容器为主的技术,容器运行不需要模拟层(emulat ...
- 关于war包 jar包 ear包 及打包方法
关于war包 jar包 ear包 及打包方法 war包:是做好一个web应用后,通常是网站打成包部署到容器中 jar包:通常是开发的时候要引用的通用类,打成包便于存放管理. ear包:企业级应用 通常 ...
随机推荐
- css选择器之间的 空格和逗号
当两个选择器之间有空格的情况下,代表的是子类选择器 .a .b{} 代表的是a类的b子类 而两个选择器之间没有空格的情况下,代表的是同时拥有两个类名的标签 <div class="a ...
- SPSS数据编辑器界面 度量 名义 序号 标签
SPSS数据编辑器界面 度量 名义 序号 标签 变量视图:变量视图用于管理变量的属性,包括变量名称,类型,标签,缺失值,度量标准等属性. 数据视图:数据视图用于管理录入的数据,一行表示一条记录在不同变 ...
- layui表格监听开关并获取改行id
,{field:'sex', title:'性别', width:85, templet: '#switchTpl', unresize: true} <script type="te ...
- mybatis中处理结果集映射
单行结果集映射: 接口中方法返回值定义为Map类型,sql语句的resultType属性设置为map即可.这种情况默认把列名作为key,列中的值作为value. 也就是说用map<Strirng ...
- 4_7.springboot2.x嵌入式servlet容器自动配置原理
概述 Spring Boot对所支持的Servlet Web服务器实现做了建模抽象: Servlet容器类型 WebServer模型接口 WebServer工厂实现类 Tomcat Tomca ...
- Django的日常-模型层(2)
目录 Django的日常-模型层(2) 几种常用的查询方式 聚合查询 分组查询 F和Q查询 查询优化相关 orm中常见字段 choices参数 orm的事务操作 Django的日常-模型层(2) 几种 ...
- Post Office IOI 2000 /// 区间DP oj24077
题目大意: 给定n个村庄的坐标,两个村庄之间的距离是其坐标之差的绝对值 最多能选m个村庄设立邮局,求设立邮局的地点使得各村庄与邮局距离总和最小 一, 所有的村庄看做在一条直线上 考虑三个因素:i 当前 ...
- 2019-11-7-C#-dotnet-线程不安全的弱引用缓存
title author date CreateTime categories C# dotnet 线程不安全的弱引用缓存 lindexi 2019-11-7 9:45:5 +0800 2019-11 ...
- 2019-5-21-Total-Commander-显示文件包含文件名扩展
title author date CreateTime categories Total Commander 显示文件包含文件名扩展 lindexi 2019-5-21 11:37:6 +0800 ...
- 小程序中template的用法
demo案例: wxml代码: <view> <text>template使用demo</text> <!-- <view wx:for="{ ...