Python代码编译并生成Docker镜像

Python代码编译并生成Docker镜像

前言

实际python项目交付时往往有针对关键代码进行保护的需求,本文介绍了一种简单可行的方案:1. 在Linux系统上先将 .py 文件编译为 .so 文件,2. 将整个项目打包成Docker镜像(解决 .so 文件的环境依赖问题)。

1. 编译.py文件为.so文件
project/
├── setup.py
└── test.py 
# test.py
import pandas as pd def testfuc():print('Hello world!')
  1. 在项目环境中安装Cython pip install cython

  2. 新建setup.py

    # setup.py
    from distutils.core import setup
    from distutils.extension import Extension
    from Cython.Build import cythonizeextensions = [Extension("test", ["test.py"]), ]setup(ext_modules=cythonize(extensions),
    )
    
  3. 在该目录下运行 python setup.py build_ext,生成 .so 文件。然后用 .so 文件替换原来的 .py 文件即可。(中间文件如.c文件可删除)

    build_ext:build C/C++ extensions (compile/link to build directory),给python编译一个c、c++的拓展
    –inplace:ignore build-lib and put compiled extensions into the source directory alongside your pure Python modules,忽略build-lib,将编译后的扩展放到源目录中,与纯Python模块放在一起

在这里插入图片描述

参考链接:

  1. python 源代码保护 之 xx.py -> xx.so - TonyZhang24 - 博客园
  2. python代码一键加密为so或pyd: jmpy库
  3. 批量打包某目录下所有的python文件: GitHub - ArvinMei/py2so: 编译py为so文件,更好的隐藏源码
2. 生成Docker镜像

目录结构:

project/
├── Dockerfile
├── requirements.txt
└── .so文件 (test.cpython-39-x86_64-linux-gnu.so)
  1. 编写dockerfile文件

这里使用了编译后的load_data.py为例

# 使用官方 Python 镜像作为基础镜像
FROM python:3.9 
# 设置工作目录
WORKDIR /app 
# 复制当前目录下的所有文件到工作目录
COPY . /app 
# 安装项目依赖
RUN pip install --no-cache-dir -r requirements.txt 
# 设置环境变量
ENV PYTHONUNBUFFERED 1 
  1. 构建Docker镜像: docker build -t test .

  2. 运行Docker容器:docker run -it --rm test,测试: from test import testfuc

    -it 参数表示在交互模式下运行容器,--rm 参数表示容器退出后立即删除

![

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/198794.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【性能测试】业务/吞吐量与存量数据设计关系+压测常见解决方案

目录:导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结(尾部小惊喜) 前言 1、性能测试中业务…

C语言错误处理之 “信号处理方式<signal.h>及signal函数等内置函数”

目录 前言 signal.h头文件 信号宏 signal函数 实例:在Linux环境下验证signal函数 实例:在Linux中演示保存signal函数的返回值 预定义的信号处理函数(简单了解) SIG_DFL函数 SIG_IGN函数 raise函数 实例:测试…

程序员必备注释模板---佛祖保佑

佛祖保佑【一】 /*** _ooOoo_* o8888888o* 88" . "88* (| -_- |)* O\ /O* ____/---\____…

leetcode 255.用队列实现栈

255.用队列实现栈 不出意外大概率这几天都会更新 leetcode,如果没有做新的题,大概就会把 leetcode 之前写过的题整理(单链表的题目居多一点)出来写成博客 今天讲的题蛮容易出错的(注意传参啊,最好把队列的…

渗透测试——五、网站漏洞——SQL注入

一、走进DVWA测试网站 1、网站渗透测试步骤 (1)收集信息 1、获取域名的 Whois 信息,获取注册者邮箱、姓名、电话等。2、查询服务器旁站及子域名站点,因为主站一般比较难,所以先看看旁站有没有通用性的CMS或者其他漏洞。3、查看服务器操作系…

解决 nginx 504 Gateway Time-out报错问题

国内GPT4站点:海鲸AI 要延长 Nginx 服务器在返回 504 Gateway Time-out 错误之前等待上游服务器响应的时间,你需要修改 Nginx 配置文件中的超时设置。以下是一些可能需要调整的指令: proxy_connect_timeout:代理服务器与上游服务…

ROS话题通信基本操作(C++)

目录 一、发布 1、实现步骤 2、代码实例 二、接收 1、实现步骤 2、代码实例 三、配置运行 1、修改CMakeLists.txt 2、运行结果 一、发布 1、实现步骤 1.包含头文件 2.初始化 ROS 节点:命名(唯一) 3.实例化 ROS 句柄 4.实例化 发布者 对象 5.组织被发布的数据&#…

Pytest做性能测试?

Pytest其实也是可以做性能测试或者基准测试的。是非常方便的。 可以考虑使用Pytest-benchmark类库进行。 安装pytest-benchmark 首先,确保已经安装了pytest和pytest-benchmark插件。可以使用以下命令安装插件: pip install pytest pytest-benchmark …

JSP控制项目启动后默认去访问指定的WebServlet 而不是index.jsp

我的 index.jsp 代码是这样 现在每次启动 访问的都是index.jsp 这也是它的默认配置 我这里写了一个 WebServlet 代码是这样 简单可以理解为 我们定义了WebServlet 访问路径为1cginServlet 其中在request作用域中 定义了一个userName值为 欢迎来到jsp世界 然后 跳转向 page.j…

十年婚姻·总结三

十年婚姻总结三 婚姻这个制度,就不是为了保护爱情和情感的,是为了保护财产和育儿 婚姻这个制度,就不是为了保护爱情和情感的,是为了保护财产和育儿 问题:为什么男人喜欢外面的女人,也不离婚? …

Rust编程语言入门教程(三)-trait

文章目录 Rust编程语言入门教程(三)-trait什么是 trait?trait使用举例 Rust编程语言入门教程(三)-trait 什么是 trait? trait 是 Rust 中的接口,它定义了类型使用这个接口的行为。你可以类比到…

Android : AndroidStudio开发工具优化

1.开启 gradle 单独的守护进程 Windows: 进入目录 C:\Users\Administrator\.gradle 创建文件: gradle.properties # Project-wide Gradle settings. # IDE (e.g. Android Studio) users: # Settings specified in this file will override any Gradle s…

前端时间的失败总结复盘

分享失败经验,前段时间的总结复盘: 与伙伴合作面对异常决策要及时提出质疑,怼,别太客气,客气起来,小心翼翼在意他人情绪那么这个项目就会让人难受,不要因为因为伙伴身上有标签/光环/权威就觉得…

怎么把视频转换为gif?

怎么把视频转换为gif?视频和 GIF 动图在许多方面都有所不同,主要的区别包括它们的数据格式、播放方式以及用途。视频:通常以常见的视频格式如MP4、AVI、MOV等存储,它们包含了连续的图像帧以及音频轨道(如果有的话&…

ISP算法简述-BLC

Black Level Calibration, 黑电平矫正 现象 1)在纯黑条件下拍张图,你会发现像素值不为0 2)或者你发现图像整体偏色 这些问题可能是黑电平导致的。 原因 存在黑电平的原因有2个: 1)sensor的电路本身存在暗电流。暗电流主要产生在光电信号转换过程中&#…

国内某求职app遭“撞库”攻击,百万条用户数据泄露

什么是撞库? 简单来说:一些用户为了方便记忆,会采用相同的账户密码登录多个网站或app,甚至是存储关键信息的系统平台。如果其中一个平台有漏洞被黑客利用窃取了账户名和密码,黑客便用这套凭证登录大量测试所有平台&am…

葡萄酒的储存条件会影响葡萄酒的陈酿吗?

自20世纪末以来,葡萄酒储存有关的行业一直在增长,一些葡萄酒鉴赏家可能会选择将葡萄酒存放在家里的专用房间或壁橱里。 自云仓酒庄品牌雷盛红酒分享总所周知,瓶装葡萄酒的储存条件是会影响葡萄酒的陈酿,振动和热波动会加速葡萄酒的…

COCO格式标签(json)内容可视化(python)

主要是查到的可用代码,便于自己使用查询,和有相关需求的提供参考。 代码是MMYOLO下的可视化代码browse_coco_json.py,有json文件和图像文件,可以直接输入执行,输出会把bbox、mask等类型标注展示。 下面直接上代码&am…

【深度学习笔记】09 权重衰减

09 权重衰减 范数和权重衰减利用高维线性回归实现权重衰减初始化模型参数定义 L 2 L_2 L2​范数惩罚定义训练代码实现忽略正则化直接训练使用权重衰减 权重衰减的简洁实现 范数和权重衰减 在训练参数化机器学习模型时,权重衰减(decay weight&#xff09…

python中获取函数签名(参数)

说明 有些时候我们不清楚python的函数的具体签名的时候,调用可能会报错,这里就是介绍一种简单的方法来获取函数的签名参数。 语法 获取函数的参数签名可以使用 组件.函数.__signature__示例: 我想要获取streamlit.text_input函数的参数签…