网上说的将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. LUOGU P4159 [SCOI2009]迷路(矩阵乘法)

    传送门 解题思路 以前bpw讲过的一道题,顺便复习一下矩阵乘法.做法就是拆点,把每个点拆成\(9\)个点,然后挨个连边.之后若\(i\)与\(j\)之间的边长度为\(x\),就让\(i\)的第\(x\ ...

  2. java8 list、map遍历以及反射

    //新建list List<User> userList = new ArrayList<>(); User user = new User(); user.setId(&qu ...

  3. AutoMapper 在你的项目里飞一会儿

    先说说DTO DTO是个什么东东? DTO(Data Transfer Object)就是数据传输对象,说白了就是一个对象,只不过里边全是数据而已. 为什么要用DTO? 1.DTO更注重数据,对领域对 ...

  4. System.Object.cs

    ylbtech-System.Object.cs 1.程序集 mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c5619 ...

  5. 转:C语言中volatile关键字的作用 专家博客

    源地址:http://blog.csdn.net/tigerjibo/article/details/7427366 一.前言 1.编译器优化介绍: 由于内存访问速度远不及CPU处理速度,为提高机器整 ...

  6. 如何上传文件到git

    具体有三大步骤: 一.创建新的仓库 二.本地仓库 三.git命令上传(需要下载git) 一.创建新的仓库   二.本地仓库 其实这个本地仓库就是文件的所在地,在哪都可以 三.git命令上传(需要下载g ...

  7. R:ggplot2数据可视化——进阶(2)

    Part 2: Customizing the Look and Feel, 更高级的自定义化,比如说操作图例.注记.多图布局等  # Setup options(scipen=999) librar ...

  8. java关于lombok(包括父类参数)

    java关于lombok对bean对象进行自动设置 使用说明 使用方式 注释类型 @NonNull @Data(常用) @NoArgsConstructor(常用)/@RequiredArgsCons ...

  9. vue-resourse简单使用方法

    一.安装引用 安装: npm install vue-resource --save-dev 引用: /*引入Vue框架*/ import Vue from 'vue' /*引入资源请求插件*/ im ...

  10. 莫烦PyTorch学习笔记(三)——激励函数

    1. sigmod函数 函数公式和图表如下图     在sigmod函数中我们可以看到,其输出是在(0,1)这个开区间内,这点很有意思,可以联想到概率,但是严格意义上讲,不要当成概率.sigmod函数 ...