小工具知识网

当前位置: 首页 > 行业知识 > 【Ubuntu】将多个python文件打包为.so文件

行业知识

【Ubuntu】将多个python文件打包为.so文件

2026-11-09 03:06:09 来源:互联网转载

1.为什么要将python打包为.so文件?

保���源码

2.实战例子

a.安装相应的包
pip install cython

 验证安装是否成功

cython --version
b.实战的文件目录和内容 

hi.py

# This is a sample Python script.# Press Shift+F10 to execute it or replace it with your code.# Press Double Shift to search everywhere for classes, files, tool windows, actions, and settings.def print_hi(name):    # Use a breakpoint in the code line below to debug your script.    print(f'Hi, {name}')  # Press Ctrl+F8 to toggle the breakpoint.# Press the green button in the gutter to run the script.if __name__ == '__main__':    print_hi('PyCharm')# See PyCharm help at https://www.jetbrains.com/help/pycharm/

hello.py

def hello(name):     print("hello " + name)

bye.py

def bye(name):     print("bye " + name)

 setup.py

把需要转换的py文件都放进去

from distutils.core import setupfrom Cython.Build import cythonizesetup(ext_modules = cythonize(["hi.py", "hello.py", "bye.py"]))

terminal运行命令

python setup.py build_ext

 运行log

Compiling hi.py because it changed.Compiling hello.py because it changed.Compiling bye.py because it changed.[1/3] Cythonizing bye.py/home/huanglu/anaconda3/envs/segment-system/lib/python3.10/site-packages/Cython/Compiler/Main.py:381: FutureWarning: Cython directive 'language_level' not set, using '3str' for now (Py3). This has changed from earlier releases! File: /home/huanglu/Desktop/liubin/so-test/bye.py  tree = Parsing.p_module(s, pxd, full_module_name)[2/3] Cythonizing hello.py/home/huanglu/anaconda3/envs/segment-system/lib/python3.10/site-packages/Cython/Compiler/Main.py:381: FutureWarning: Cython directive 'language_level' not set, using '3str' for now (Py3). This has changed from earlier releases! File: /home/huanglu/Desktop/liubin/so-test/hello.py  tree = Parsing.p_module(s, pxd, full_module_name)[3/3] Cythonizing hi.py/home/huanglu/anaconda3/envs/segment-system/lib/python3.10/site-packages/Cython/Compiler/Main.py:381: FutureWarning: Cython directive 'language_level' not set, using '3str' for now (Py3). This has changed from earlier releases! File: /home/huanglu/Desktop/liubin/so-test/hi.py  tree = Parsing.p_module(s, pxd, full_module_name)

 运行结果

 可以发现多了几个.c文件和build文件夹

build文件夹中

 

复制到根目录

 

在根目录里, 写一个demo.py

from hi import print_hifrom hello import hellofrom bye import byeprint_hi("K.D.")hello("LeBron")bye("Kobe")

 运行

Hi, K.D.hello LeBronbye KobeProcess finished with exit code 0

 把hi.py,hello.py,bye.py删除,再执行demo.py,可以得到同样的结果

即  此时已经使用到了.so文件,而不是原来的.py文件

如果.py在不同文件夹中,则在不同文件夹里面执行类似操作。

待续。。

 

 

 

上一篇:做外贸怎么开发客户?

下一篇:ai中怎么画电话icon?