py文件转换为so文件
将py文件编译为so文件

利用上面代码生成so文件生成的文件不方便取放,名字也不一样
通过执行发现转换执行了下面三句
/usr/local/python3/bin/cython test.py
gcc -pthread -Wno-unused-result -Wsign-compare -DNDEBUG -g -fwrapv -O3 -Wall -fPIC -I/usr/local/python3/include/python3.7m -c test.c -o test.o
gcc -pthread -shared test.o -o test.so
通过命令行执行也可以生成,那么开始编写一个shell脚本
import datetime
import os '''
/usr/local/python3/bin/cython test.py
gcc -pthread -Wno-unused-result -Wsign-compare -DNDEBUG -g -fwrapv -O3 -Wall -fPIC -I/usr/local/python3/include/python3.7m -c test.c -o test.o
gcc -pthread -shared test.o -o test.so
''' def func(path, save_file='build.sh'):
path = path.replace('\\', '/')
path = path.replace('\\', '/')
with open(save_file, "w", encoding='utf-8') as fw:
fw.write("#!/bin/bash" + "\n")
basic_folder = os.path.split(path)[1]
# print(path)
now_time = datetime.datetime.now()
encryp_path = f'encryp_so{now_time.strftime("%Y%m%d%H%M%S")}'
# print(encryp_path)
fw.write("\n")
fw.write(f"mkdir {encryp_path}" + "\n")
fw.write("\n")
fw.write("\n")
for root, dirs, files in os.walk(path):
for file in files:
# print(file)
ftype = str(file).split('.')[-1]
# print(ftype)
if ftype == 'py':
if file != '__init__.py':
folder = os.path.split(root)[1]
if folder != 'migrations':
if root == path:
befor_path = ''
else:
# print(root)
length = len(path)
join_path = root[length+1:]
join_path = join_path.replace('\\', '/')
join_path = join_path.replace('\\', '/')
# print(join_path)
befor_path = f'{join_path}/'
final_file = befor_path+file
fw.write(f"/usr/local/python3/bin/cython {final_file}" + "\n")
fw.write("\n")
fw.write("\n")
fw.write("\n")
for root, dirs, files in os.walk(path):
for file in files:
# print(file)
ftype = str(file).split('.')[-1]
fname = str(file).split('.')[0]
# print(ftype)
if ftype == 'py':
if file != '__init__.py':
folder = os.path.split(root)[1]
if folder != 'migrations':
if root == path:
befor_path = ''
else:
# print(root)
length = len(path)
join_path = root[length + 1:]
join_path = join_path.replace('\\', '/')
join_path = join_path.replace('\\', '/')
# print(join_path)
befor_path = f'{join_path}/'
final_file = befor_path + fname
o_file = befor_path + fname fw.write(f"gcc -pthread -Wno-unused-result -Wsign-compare -DNDEBUG -g -fwrapv -O3 -Wall -fPIC -I/usr/local/python3/include/python3.7m -c {final_file}.c -o {o_file}.o" + "\n")
# print(root, dirs, files) fw.write("\n")
fw.write("\n")
fw.write("\n")
for root, dirs, files in os.walk(path):
for file in files:
# print(file)
ftype = str(file).split('.')[-1]
fname = str(file).split('.')[0]
# print(ftype)
if ftype == 'py':
if file != '__init__.py':
folder = os.path.split(root)[1]
if folder != 'migrations':
if root == path:
befor_path = ''
else:
# print(root)
length = len(path)
join_path = root[length + 1:]
join_path = join_path.replace('\\', '/')
join_path = join_path.replace('\\', '/')
# print(join_path)
befor_path = f'{join_path}/'
final_file = befor_path + fname
o_file = befor_path + fname fw.write(f"gcc -pthread -shared {final_file}.o -o {o_file}.so" + "\n") fw.write("\n")
fw.write("\n")
fw.write("\n")
fw.write("find . -name '*.c' -delete" + "\n")
fw.write("find . -name '*.o' -delete" + "\n")
fw.write("\n")
for root, dirs, files in os.walk(path):
# print(dirs)
length = len(path)
join_path = root[length + 1:]
join_path = join_path.replace('\\', '/')
join_path = join_path.replace('\\', '/')
# print(join_path, dirs) for dir in dirs:
if '.git' in join_path or '.idea' in join_path:
# print(join_path)
continue
if dir != '__pycache__' and '.git' not in dir and '.idea' not in dir:
if join_path:
new_path = join_path+f'/{dir}'
else:
new_path = dir
fw.write(f"mkdir {encryp_path}/{new_path}" + "\n")
fw.write("\n")
for root, dirs, files in os.walk(path):
for file in files:
# print(file)
ftype = str(file).split('.')[-1]
fname = str(file).split('.')[0]
# print(ftype)
if ftype == 'py':
folder = os.path.split(root)[1]
if folder != 'migrations':
if root == path:
befor_path = ''
else:
# print(root)
length = len(path)
join_path = root[length + 1:]
join_path = join_path.replace('\\', '/')
join_path = join_path.replace('\\', '/')
# print(join_path)
befor_path = f'{join_path}/'
final_file = befor_path + fname
o_file = befor_path + fname
if file != '__init__.py': fw.write(f"mv {final_file}.so {encryp_path}/{o_file}.so" + "\n")
else:
final_file = befor_path + fname
o_file = befor_path + fname
fw.write(f"cp {final_file}.py {encryp_path}/{o_file}.py" + "\n") def start(basic_path, folder_list,save_list): for i in range(len(folder_list)):
path = os.path.join(basic_path, folder_list[i])
func(path, save_list[i]) if __name__ == '__main__':
# file_path = __file__
# basic_path = os.path.split(file_path)[0]
# folder_list = ['']
# save_list = ['build222.sh']
# start(basic_path, folder_list, save_list)
# print(path)
# print(os.path.join(basic_path, '')) basic_path = r'G:\work\debug\test_so'
folder_list = ['aaa']
save_list = ['build221.sh']
start(basic_path, folder_list, save_list)
通过代码生成一个shell脚本,再去执行这个脚本,达到生成一样目录结构的so文件目录
执行完后生成的sh文件
#!/bin/bash mkdir encryp_so20230309145220 /usr/local/python3/bin/cython te.py gcc -pthread -Wno-unused-result -Wsign-compare -DNDEBUG -g -fwrapv -O3 -Wall -fPIC -I/usr/local/python3/include/python3.7m -c te.c -o te.o gcc -pthread -shared te.o -o te.so find . -name '*.c' -delete
find . -name '*.o' -delete mkdir encryp_so20230309145220/bbb mv te.so encryp_so20230309145220/te.so
cp __init__.py encryp_so20230309145220/__init__.py
直接执行该文件即可得到想要的so文件
py文件转换为so文件的更多相关文章
- python之模块py_compile用法(将py文件转换为pyc文件)
# -*- coding: cp936 -*- #python 27 #xiaodeng #python之模块py_compile用法(将py文件转换为pyc文件):二进制文件,是由py文件经过编译后 ...
- TensorFlow的checkpoint文件转换为pb文件
由于项目需要,需要将TensorFlow保存的模型从ckpt文件转换为pb文件. import os from tensorflow.python import pywrap_tensorflow f ...
- 使用VirtualBox把IMG文件转换为VDI文件
使用VirtualBox把IMG文件转换为VDI文件 首先确保已安装VirtualBox. 需要使用的命令: 语法:$ VBoxManage convertdd input.img output.vd ...
- APNS .p12文件转换为 .pem文件
1:先用mac的钥匙串工具,把APN的推送证书转换为 .p12文件: 2:在mac的终端下 把.p12文件转换为 .pem文件 openssl pkcs12 -in apns-dev-cert.p12 ...
- Python如何实现doc文件转换为docx文件?
Python如何实现doc文件转换为docx文件? 在开发过程中遇到一个关于读写doc和docx的问题: 一个文件夹中有两种文件, 一种为doc结尾, 一种为docx结尾, 需要将这些文件全部重命名. ...
- GIF文件转换为头文件工具
目的: GIF文件转为头文件 举例: 用UE打开GIF文件,如下图所示:图1 test.gif文件将上面文件内容转化为头文件,放到一个数组里面,内容如下:图2 test.h文件 思路: 从上面可知,将 ...
- bat文件转换为exe文件
批处理文件转换为exe文件(简单的处理文件),点击下载 使用超简单的了,不多说.
- 实战FFmpeg--iOS平台使用FFmpeg将视频文件转换为YUV文件
做播放器的开发这里面涉及的东西太多,我只能一步步往前走,慢慢深入.播放器播放视频采用的是渲染yuv文件.首先,要知道yuv文件是怎么转换得来的,其次,要知道怎么把视频文件保存为yuv文件.雷神的文章1 ...
- php如何将base64数据流文件转换为图片文件?
2017-03-07 在开发中,自己遇到一个前端在上传图片的时候,使用的base64数据流文件显示的图片. 也就是说 <img src="data:image/jpg;base64,& ...
- openoffice启动服务并将office文件转换为pdf文件
1.首先下载最新版的openoffice工具,安装完成之后安装服务,, win+r打开命令提示符 输入cmd,cd C:\Program Files (x86)\OpenOffice 4\progra ...
随机推荐
- LeetCode 之 111. 二叉树的最小深度
原题链接 思路: 递归计算每个子树的深度,返回左右子树中深度小的值: 由于题目中要求的是到最近叶子节点的深度,所以需要判断 左右子树为空的情况: python/python3: class Solut ...
- CatDCGAN项目复现与对抗网络初识
CatDCGAN项目复现与对抗网络初识 作者 CarpVexing 日期 100521 禁止转载 目录 CatDCGAN项目复现与对抗网络初识 引言 CatDCGAN项目基本信息 复现项目的准备工作 ...
- data location nextcloud
/var/snap/nextcloud/common/nextcloud/data/ Adding files to Nextcloud using the command line https:// ...
- 在DeepIn系统中使用eclipse创建maven的Web项目
1. 安装好jdk和eclipse以后,启动eclipse 2. 创建maven项目,选择Maven Project 3. 在创建项目过程中,创建简单Maven项目,不使用archetype创建(会联 ...
- ubuntu 16.04 安装VNC远程桌面 安装wine+hfs
1.安装$sudo apt-get install xfce4 $sudo apt-get install vnc4server$sudo apt-get install xrdp 2.启动VNC s ...
- vue 作者在2022-2-7起宣布 vue3 正式作为默认版本
vue 作者在2022-2-7起宣布 vue3 正式作为默认版本 vue 作者尤雨溪在知乎上发布一篇文章,宣布 Vue3 将在 2022 年 2 月 7 日 成为新的默认版本! 并且还在文章中做出了一 ...
- ls和mkdir
ls 查看当前目录的内容 1) ls -l 显示详细列表 2) Ls -lh 吧文件大小以人性化的方式展开 3) ls -a 显示所有的文件,包括隐藏文件,隐藏文件是已.开头的文件 4) ll 等于 ...
- iText5实现Java生成PDF
参考代码:https://github.com/youcong1996/study_simple_demo 参考博客:https://blog.csdn.net/weixin_37848710/art ...
- Spring Bean 的生命周期(详细解读)
Spring Bean 的生命周期简单易懂.在一个 bean 实例被初始化时,需要执行一系列的初始化操作以达到可用的状态.同样的,当一个 bean 不再被调用时需要进行相关的析构操作,并从 bean ...
- 刷爆 LeetCode 周赛 337,位掩码/回溯/同余/分桶/动态规划·打家劫舍/贪心
本文已收录到 AndroidFamily,技术和职场问题,请关注公众号 [彭旭锐] 提问. 大家好,我是小彭. 上周末是 LeetCode 第 337 场周赛,你参加了吗?这场周赛第三题有点放水,如果 ...