python的py转pyd方法(cython)

转pyd 可以保护源码,并加速函数运行效率

将setup.py和run_cython_setup.bat拷贝到要编译的webui.py同级目录下,

1、编辑setup.py 设置:很多人卡在这了,设置不对,编译不成,南无阿弥陀佛。

复制代码
# coding:utf-8

import os,sys
current_dir = os.path.dirname(os.path.abspath(__file__))
sys.path.append(current_dir)

from setuptools import setup, Extension
from Cython.Build import cythonize
import setuptools.dist

# 更安全的方式:使用*args和**kwargs匹配任意参数
original_find_pattern = setuptools.dist.Distribution._find_pattern
def custom_find_pattern(self, *args, **kwargs):
    # 检查第一个参数是否是我们要忽略的模式
    if args and len(args) > 0 and isinstance(args[0], str) and args[0].startswith("INDEX_MODEL_LICENSE"):
        return []
    # 调用原始方法,传递所有参数
    return original_find_pattern(self, *args, **kwargs)
setuptools.dist.Distribution._find_pattern = custom_find_pattern

# 定义要编译的扩展模块
ext = Extension(
    name="webui",  # 生成的模块名称
    sources=["webui.py"],  # 要编译的Python文件
)

# 配置编译设置
setup(
    name="webui_ext",
    version="1.0",
    packages=[],  # 禁用自动包发现
    py_modules=[],  # 不包含其他Python模块
    ext_modules=cythonize(
        ext,
        compiler_directives={
            "language_level": "3",  # 匹配Python 3.11
        },
        annotate=False
    ),
    zip_safe=False
)

2、运行run_cython_setup.bat执行编译:

复制代码
python311\python.exe  -m  pip install --upgrade pip
python311\python.exe -m pip install  cython setuptools
python311\python.exe "setup.py" build_ext --inplace --plat-name=win-amd64
pause

3、编译完成后,会在同级目录下:webui.cp311-win_amd64.pyd

4、测试效果:

(1)创建webui_load.py

复制代码
import os,sys
current_dir = os.path.dirname(os.path.abspath(__file__))
sys.path.append(current_dir)

from webui import *

if __name__ == "__main__":
    man_ui()

(2)创建run_cython_pyd_test.bat,用于执行测试

复制代码
@echo off
:: 强制UTF-8编码,解决中文问题
chcp 65001 >nul


REM ====== 设置 Python 路径 ======
SET PYTHON_PATH=%cd%\python311
::SET PYTHON_PATH=%cd%\python311
SET PYTHON_EXECUTABLE=%PYTHON_PATH%\python.exe

REM ====== 清理系统干扰 ======
set PYTHONNOUSERSITE=1
set PYTHONHOME=
set PYTHONPATH=

REM ====== ffmpeg 路径 ======
SET FFMPEG_PATH=%cd%\python311\ffmpeg\bin
::SET FFMPEG_PATH=%cd%\python\ffmpeg\bin
SET PATH=%PYTHON_PATH%;%PYTHON_PATH%\Scripts;%FFMPEG_PATH%;%PATH%

REM ====== 可选:静音 cl 编码告警 ======
set CL=/utf-8

REM ====== 启动 ======


python311\python.exe webui_load.py

pause

(3)双击run_cython_pyd_test.bat。看结果。

5、要编译的webui.py文件,格式要求,最好是主程序,或纯函数库,而且路径设置要做好。

复制代码
import os,sys
current_dir = os.path.dirname(os.path.abspath(__file__))
sys.path.append(current_dir)
sys.path.append(os.path.join(current_dir, "indextts"))

#...... 源程序体,省略......
# 主UI开始入口 ==============================================
with gr.Blocks(title="IndexTTS Demo") as demo:
     #...... 源程序体,省略......
    # open dark style window mode
    import webbrowser 
    url = "http://127.0.0.1:7860/?__theme=dark"
    webbrowser.open(url)
    print("http://127.0.0.1:7860/?__theme=dark")
    
#为了导入pyd 时,调用主UI
def man_ui():
    demo.queue(20)
    #demo.launch(server_name=cmd_args.host, server_port=cmd_args.port,inbrowser=True  )
    demo.launch(server_name=cmd_args.host, server_port=cmd_args.port,inbrowser=False  )

if __name__ == "__main__":
    man_ui()

南无阿弥陀佛

相关推荐
1024奇点2 小时前
【仓颉语言入门 · 第二篇 第 22 课】
开发语言·ide·开源
实名上网宋凯宣2 小时前
Django
后端·python·django
Warren2Lynch3 小时前
C4 模型详解:利用 Visual Paradigm 可视化软件架构的综合指南
开发语言·uml
如若1233 小时前
【论文复现】CoFailMed:从零复现医学图像分割的共享失败审计,含完整代码流程与科研绘图
人工智能·python
Knight_AL3 小时前
Java 文件下载时文件名中的 `#` 被转换成 `%23`?一次 URL 编码与解码问题排查
java·开发语言
FRing034 小时前
vue2干货总结2(v-bind、v-for、v-model、指令修饰符、v-bind操作class和style)
开发语言·前端·vue.js·vue2
by209995 小时前
C++ 智能指针的所有权与使用
开发语言·c++·经验分享
砚底藏山河5 小时前
python量化自定义周期 K 线合成
java·开发语言·数据库·python·金融
视觉小萌新5 小时前
AI Class 3 · Chapter 1:变量、字符串、list/dict、if/for(python学习-小白版-有经验可跳过)
python·学习·list
IT召唤狮5 小时前
开源企业级零信任项目Pangolin,零信任能挡住PHP核弹漏洞吗?
开发语言·开源·php