热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

cython编译python_Cython+PyinstallerPython编译与打包踩坑

一、目的:将项目所有的代码,编译成一个独立的二进制文件包,并防止反编译。二、示例项目结构:➜cpdemotree.|--libs

一、目的:

将项目所有的代码,编译成一个独立的二进制文件包,并防止反编译。

二、示例项目结构:

➜ cpdemo tree

.

|-- libs

| |-- A

| | `-- a.py

| `-- B

| `-- b.py

`-- setup

|-- build_pyd.py

`-- main.py

4 directories, 4 files

总共四个文件,A 和 B分别是两个类,其中mian.py 引用a, a引用b:

三、先使用Cython编译:

#build_pyd.py文件内容如下,自行添加要编译的文件路径到cythonize的第一个参数列表里。每个文件会单独编译成一个.so文件。

from distutils.core import setup

from Cython.Build import cythonize

setup(

name='Anything you want',

ext_modules=cythonize(["../libs/A/*.py", "../libs/B/*.py"

], language_level=3

),

)

在setup文件夹下,执行python3 build_pyd.py build_ext --inplace 命令,

执行成功后在setup文件夹里生成两个文件:

a.cpython-36m-x86_64-linux-gnu.so b.cpython-36m-x86_64-linux-gnu.so

执行出错,参考issues-1

四、使用Pyinstaller 打包

执行pyinstaller -F main.py 命令,执行成功在dist目录先生成main文件。执行结果如下:

如果包No module named xxx的错误,参考 issues-3

五、issues:如果出现如下:

Fatal error: can't create build/temp.linux-x86_64-3.6/../libs/A/a.o: No such file or directory

error: command 'gcc' failed with exit status 1

自行在build目录下创建,temp.linux-x86_64-3.6,文件夹,什么原因导致的,不知道。

2. 如果提示pyinstaller未安装,自行使用pip安装:

pip3 install pyinstaller

3. 重点来了,如果出现了ModuleNotFoundError: No module named 'b'

ps:基本都会出现,如果你直接执行python main.py正常的话,这里并不表示你的代码有问题。只是pyinstaller默认不会引入导入再导入的文件,即b.py。因此只需要修改生成的main.spec文件,修改如下,如果有其他文件缺失,自行天街:

然后执行: pyinstaller main.spec

即可:

5241 INFO: Building EXE from EXE-00.toc completed successfully.

六、demo代码rmokerone/cpdemo​github.comv2-7b04610b3b3923ad12dd6973c97c703d_ipico.jpg

七、参考链接https://stackoverflow.com/questions/25733467/no-module-named-when-using-pyinstaller​stackoverflow.comv2-2d47e939feed796bcf7483d306661c88_ipico.jpg



推荐阅读
  • 本文介绍了一种轻巧方便的工具——集算器,通过使用集算器可以将文本日志变成结构化数据,然后可以使用SQL式查询。集算器利用集算语言的优点,将日志内容结构化为数据表结构,SPL支持直接对结构化的文件进行SQL查询,不再需要安装配置第三方数据库软件。本文还详细介绍了具体的实施过程。 ... [详细]
  • Go Cobra命令行工具入门教程
    本文介绍了Go语言实现的命令行工具Cobra的基本概念、安装方法和入门实践。Cobra被广泛应用于各种项目中,如Kubernetes、Hugo和Github CLI等。通过使用Cobra,我们可以快速创建命令行工具,适用于写测试脚本和各种服务的Admin CLI。文章还通过一个简单的demo演示了Cobra的使用方法。 ... [详细]
  • 目录1、将mysql数据导出到SQL文件中(数据库存在的情况)2、将现有的sql文件数据导入到数据库中(前提数据库存在) 3、利用Navicat导出SQL文件和导入SQL文件1)从 ... [详细]
  • Linux重启网络命令实例及关机和重启示例教程
    本文介绍了Linux系统中重启网络命令的实例,以及使用不同方式关机和重启系统的示例教程。包括使用图形界面和控制台访问系统的方法,以及使用shutdown命令进行系统关机和重启的句法和用法。 ... [详细]
  • baresip android编译、运行教程1语音通话
    本文介绍了如何在安卓平台上编译和运行baresip android,包括下载相关的sdk和ndk,修改ndk路径和输出目录,以及创建一个c++的安卓工程并将目录考到cpp下。详细步骤可参考给出的链接和文档。 ... [详细]
  • 【Windows】实现微信双开或多开的方法及步骤详解
    本文介绍了在Windows系统下实现微信双开或多开的方法,通过安装微信电脑版、复制微信程序启动路径、修改文本文件为bat文件等步骤,实现同时登录两个或多个微信的效果。相比于使用虚拟机的方法,本方法更简单易行,适用于任何电脑,并且不会消耗过多系统资源。详细步骤和原理解释请参考本文内容。 ... [详细]
  • 使用Ubuntu中的Python获取浏览器历史记录原文: ... [详细]
  • imx6ull开发板驱动MT7601U无线网卡的方法和步骤详解
    本文详细介绍了在imx6ull开发板上驱动MT7601U无线网卡的方法和步骤。首先介绍了开发环境和硬件平台,然后说明了MT7601U驱动已经集成在linux内核的linux-4.x.x/drivers/net/wireless/mediatek/mt7601u文件中。接着介绍了移植mt7601u驱动的过程,包括编译内核和配置设备驱动。最后,列举了关键词和相关信息供读者参考。 ... [详细]
  • 本文介绍了在多平台下进行条件编译的必要性,以及具体的实现方法。通过示例代码展示了如何使用条件编译来实现不同平台的功能。最后总结了只要接口相同,不同平台下的编译运行结果也会相同。 ... [详细]
  • 树莓派语音控制的配置方法和步骤
    本文介绍了在树莓派上实现语音控制的配置方法和步骤。首先感谢博主Eoman的帮助,文章参考了他的内容。树莓派的配置需要通过sudo raspi-config进行,然后使用Eoman的控制方法,即安装wiringPi库并编写控制引脚的脚本。具体的安装步骤和脚本编写方法在文章中详细介绍。 ... [详细]
  • VueCLI多页分目录打包的步骤记录
    本文介绍了使用VueCLI进行多页分目录打包的步骤,包括页面目录结构、安装依赖、获取Vue CLI需要的多页对象等内容。同时还提供了自定义不同模块页面标题的方法。 ... [详细]
  • 解决.net项目中未注册“microsoft.ACE.oledb.12.0”提供程序的方法
    在开发.net项目中,通过microsoft.ACE.oledb读取excel文件信息时,报错“未在本地计算机上注册“microsoft.ACE.oledb.12.0”提供程序”。本文提供了解决这个问题的方法,包括错误描述和代码示例。通过注册提供程序和修改连接字符串,可以成功读取excel文件信息。 ... [详细]
  • 本文记录了作者对x265开源代码的实现与框架进行学习与探索的过程,包括x265的下载地址与参考资料,以及在Win7 32 bit PC、VS2010平台上的安装与配置步骤。 ... [详细]
  • 本文概述了JNI的原理以及常用方法。JNI提供了一种Java字节码调用C/C++的解决方案,但引用类型不能直接在Native层使用,需要进行类型转化。多维数组(包括二维数组)都是引用类型,需要使用jobjectArray类型来存取其值。此外,由于Java支持函数重载,根据函数名无法找到对应的JNI函数,因此介绍了JNI函数签名信息的解决方案。 ... [详细]
  • PeopleSoft安装镜像版本及导入语言包的方法
    本文介绍了PeopleSoft安装镜像的两个版本,分别是VirtualBox虚拟机版本和NativeOS版本,并详细说明了导入语言包的方法。对于Windows版本,可以通过psdmt.exe登录进入,并使用datamover脚本导入语言包。对于Linux版本,同样可以使用命令行方式执行datamover脚本导入语言包。导入语言包后,可以实现多种语言的登录。参考文献提供了相关链接以供深入了解。 ... [详细]
author-avatar
情商是你弟
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有