源代码如下所示,

```setup.py```

import sys
arg_list = sys.argv
f_name = arg_list[1]
sys.argv.pop(1)
from distutils.core import setup
from Cython.Build import cythonizeprint(sys.argv, f_name)
setup(ext_modules=cythonize(f_name))

```su_main.py```

import os
ignore_files = ['setup.py', 'manage.py', 'su_main.py', 'main.py', 'build', 'extra_apps', 'static', 'templates', 'logs', 'JEIME', 'package'] # 根目录下不用(能)转译的文件(夹)名, 入口文件一定要加进来
ignore_names = ['migrations', 'apps.py', 'models.py'] # 不用(能)转译的文件(夹)名
BASE_DIR = os.path.dirname(os.path.abspath(__file__))
ignore_files = [os.path.join(BASE_DIR, x) for x in ignore_files]
package = True    # 是否打包到一个文件夹内
package_path = os.path.join(BASE_DIR, 'package') //打包文件夹路径
if not os.path.exists(package_path):os.mkdir(package_path)
translate_pys = []
def translate_dir(path):pathes = os.listdir(path)if path != BASE_DIR and not '__init__.py' in pathes:with open(os.path.join(path, '__init__.py'), 'w', encoding='utf8') as f:passfor p in pathes:if p in ignore_names:continueif p.startswith('__') or p.startswith('.') or p.startswith('build'):continuef_path = os.path.join(path, p)if f_path in ignore_files:continueif os.path.isdir(f_path):translate_dir(f_path)else:if not f_path.endswith('.py') and not f_path.endswith('.pyx'):continueif f_path.endswith('__init__.py') or f_path.endswith('__init__.pyx'):continuewith open(f_path, 'r', encoding='utf8') as f:content = f.read()if not content.startswith('# cython: language_level=3'):content = '# cython: language_level=3\n' + contentwith open(f_path, 'w', encoding='utf8') as f1:f1.write(content)os.system('python setup.py ' + f_path + ' build_ext --inplace')translate_pys.append(f_path)f_name = '.'.join(f_path.split('.')[:-1])py_file = '.'.join([f_name, 'py'])c_file = '.'.join([f_name, 'c'])if os.path.exists(c_file):os.remove(c_file)def remove_dir(path, rm_path=True):if not os.path.exists(path):returnpathes = os.listdir(path)for p in pathes:f_path = os.path.join(path, p)if os.path.isdir(f_path):remove_dir(f_path, False)os.rmdir(f_path)else:os.remove(f_path)if rm_path:os.rmdir(path)def mv_to_packages(path=BASE_DIR):pathes = os.listdir(path)for p in pathes:if p.startswith('.'):continuef_path = os.path.join(path, p)if f_path == package_path:continuep_f_path = f_path.replace(BASE_DIR, package_path)if os.path.isdir(f_path):if not os.path.exists(p_f_path):os.mkdir(p_f_path)mv_to_packages(f_path)else:if not f_path.endswith('.py') or f_path not in translate_pys:with open(f_path, 'rb') as f:content = f.read()with open(p_f_path, 'wb') as f:f.write(content)if f_path.endswith('.pyd'):os.remove(f_path)def run():translate_dir(BASE_DIR)remove_dir(os.path.join(BASE_DIR, 'build'))if package:mv_to_packages()if __name__ == '__main__':run()

su_man为打包入口文件, 拖入到项目根目录下, 正确配置即可通过进行运行

注意: 各文件夹内需要有__init__.py, 不然生成的文件都在根目录, 这是Cython决定的, 代码中已包含自动生成。

使用Cython打包成pyd文件相关推荐

  1. python源码加密打包成pyd,编译生成pyd,加密生成pyd

    关于toollib 当我们交付python代码时,存在源码安全的问题,为了确保源码安全目前最有效的方式就是打包成pyd,为此toollib给力完美的封装. 1)安装toollib 执行命令:pip i ...

  2. 将pyx文件编译成pyd文件(很多坑,已解决)

    项目场景: Faster R-CNN项目,将pyx文件编译成pyd文件(很多坑,请注意) 项目环境 python 3.6 – conda的虚拟环境 TensorFlow 1.15.0 win 10 问 ...

  3. 把python语言翻译出来_Python语言实现翻译小工具(Python打包成exe文件)

    本文主要向大家介绍了Python语言实现翻译小工具(Python打包成exe文件),通过具体的内容向大家展示,希望对大家学习Python语言有所帮助. 1.环境 windows10 python3.5 ...

  4. cocos2d-x 打包成so文件之后,假设出现错误,能够使用ndk-stack来查看里面的异常...

    cocos2d-x  打包成so文件之后,假设出现错误,能够使用ndk-stack来查看里面的异常 详细方法.自行百度. 转载于:https://www.cnblogs.com/jzssuanfa/p ...

  5. 软件分享:将应用一键打包成dmg文件

    简介 苹果软件开发完成后,都要打包成dmg文件.通常的做法也许是到系统自带的磁盘工具里制作dmg文件,但这样做比较繁琐,尤其是要打包多个应用时,每次只能制作一个dmg文件很麻烦.分享一个很好用很方便的 ...

  6. 把Java程序打包成jar文件包并执行

    把Java程序打包成jar文件包并执行 1.首先要确认自己写的程序有没有报错. 2.第一次我写的是Web Project到现在,我一直没有执行成功,所以最好创建的是java Project 打包步骤: ...

  7. 成功解决:将后缀.pyx格式文件(linux环境)编译成pyd文件(windows环境下)实现python编程加载或导入

    成功解决:将后缀.pyx格式文件(linux环境)编译成pyd文件(windows环境下)实现python编程加载或导入 目录 解决问题 解决思路 解决方法 解决问题 .pyx格式文件,在window ...

  8. php将文件夹打包zip文件,php将文件夹打包成zip文件

    php将文件夹打包成zip文件:function addFileToZip($path,$zip){ $handler=opendir($path); //打开当前文件夹由$path指定. while ...

  9. keil生成hex文件找不到_骚操作!用Python把公众号文章打包成pdf文件,再也不怕找不到了...

    背景 做自媒体的人,尤其是做了一年甚至更久的自媒体人,尤其是通过自媒体还有一些小收入的人,他们最怕自己的公众号内容因为各种原因而丢失,那就太可怕了! 在做自媒体内容上花了太多心血,如果突然一下就没了, ...

最新文章

  1. 八大基本数据类型对应的八大包装类(含对应面试题解析)
  2. php 合并 字符串_PHP如何去重合并字符串
  3. 【bzoj 3601】一个人的数论 (莫比乌斯反演+伯努利数)
  4. 开发缺点_开发移动端手机APP有哪些优缺点?
  5. 小学认识计算机硬件ppt,认识计算机硬件课件.ppt
  6. 飞鸽传书完全不知道这是什么
  7. 【Socket】关于socket长连接的心跳包
  8. truncate delete 与 drop的区别
  9. think php5关联模型,thinkphp5的模型中使用关联
  10. java 多线程基础, 我觉得还是有必要看看的
  11. 【java】java 协程
  12. 《打造七星级团队》观后感
  13. Atitit.研发管理---TOGAF架构跟 (ADM开发方法)总结
  14. [美国]《霍比特人:意外之旅》[BD-RMVB.720p.中英双字][2012年奇幻动作]
  15. qq系统软件测试计划,软件测试设计报告案例——qq空间.doc
  16. 以太坊:过去、现在、未来
  17. SmartForms 取消Word编辑器 恢复文本编辑器
  18. 将ubuntu光盘作为安装源_从光盘安装ubuntu
  19. 修复 Windows 映像
  20. A92怎么获取root,A92参数

热门文章

  1. Windows共享文件或打印机的方法【各种情况的集合】
  2. 高考水平科测试软件,新高考选科查询工具推荐-高考选科专业测试免费!
  3. 用vb.net编写的软件有哪些?
  4. location对象的方法
  5. SVN:idea下切换账号
  6. Revit教程 | 如何用 Revit 做不规则的墙体?
  7. ZWave 中的消息队列机制
  8. [android] 百度地图开发 (三).定位当前位置及getLastKnownLocation获取location总为空问题
  9. vivo电池损耗指令代码_为老机型“续命”!vivo推出NEX电池焕新活动,超低价换原装电池...
  10. php mysql导入表格大量数据,PHP批量导入excell表格到mysql数据库