程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式師世界 >> 編程語言 >  >> 更多編程語言 >> Python

python 將函數封裝成pyd或者so文件,調用該文件

編輯:Python

提示:文章寫完後,目錄可以自動生成,如何生成可參考右邊的幫助文檔

文章目錄

  • 前言
  • 一、裝包?
  • 二、使用步驟
    • 1.需要加密的函數
    • 2.用於加密函數的邏輯
    • 3. 執行命令
    • 4. 加密後函數的調用
  • 總結


前言

提示:這裡可以添加本文要記錄的大概內容:

例如:


提示:以下是本篇文章正文內容,下面案例可供參考

一、裝包?

pip install cython

二、使用步驟

1.需要加密的函數

代碼如下(示例):

#!/usr/bin/python3.6.10
# -*- coding: utf-8 -*-
# @Author : j.
# @Time : 2022/7/20 13:52
# @File : pp.py
import os
import time
from pathlib import Path
def func(n):
li = []
for i in range(n):
li.append(i)
return li
if __name__ == '__main__':
res = func(10)
print(res)
pass

2.用於加密函數的邏輯

代碼如下(示例):

#!/usr/bin/python3.6.10
# -*- coding: utf-8 -*-
# @Author : j.
# @Time : 2022/7/20 13:51
# @File : a.py
from distutils.core import setup
from Cython.Build import cythonize
from distutils.extension import Extension
def main():
# 這裡為文件名 可以增加多個Extension(' ', [' '])
# extensions = [Extension('detectOpenvino',['detectOpenvino.py'])]
extensions = [Extension('pp',['pp.py'])]
setup(ext_modules=cythonize(extensions))
# setup(ext_modules=cythonize(['class_predict.py','model.py','keypoint_infer.py','litehrnet_model.py'])) 打包單個
if __name__ == '__main__':
main()

3. 執行命令


python pp.py build_ext
""" 之後完後會生成 release/ 以及 amd/ windows下只需要 .pyd 文件(該文件是可以修改名字的後綴.pyd不變) 在build/py36/pp.pyd """

4. 加密後函數的調用

#!/usr/bin/python3.6.10
# -*- coding: utf-8 -*-
# @Author : j.
# @Time : 2022/7/20 14:19
# @File : a1.py
from pathlib import Path
import os
import sys
pyversion = "".join(sys.version.split(".")[:2])
lib_path = Path(os.path.abspath(__file__)).parent / "build" / ("py" + pyversion)
print(lib_path)
sys.path.insert(0, lib_path.as_posix())
from pp import func # 模塊裡的函數名
print(func(10))

總結

提示:這裡對文章進行總結:


  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式師世界 All Rights Reserved