Python代码编译并生成Docker镜像

Python代码编译并生成Docker镜像

前言

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

1. 编译.py文件为.so文件
复制代码
project/
├── setup.py
└── test.py 
python 复制代码
# test.py
import pandas as pd 

def testfuc():
    print('Hello world!')
  1. 在项目环境中安装Cython pip install cython

  2. 新建setup.py

    python 复制代码
    # setup.py
    from distutils.core import setup
    from distutils.extension import Extension
    from Cython.Build import cythonize
    
    extensions = [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为例

dockerfile 复制代码
# 使用官方 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 参数表示容器退出后立即删除

相关推荐
qq_158895411112 小时前
AI 音乐生成完成后,音频 URL 为什么会过期?一套可恢复的交付方案
python·api·ai音乐
Warson_L4 小时前
高性能架构设计
python·go
databook4 小时前
新数据到手,先跑哪几步检查
python·数据分析
czq_26867194875 小时前
Python打卡第46天
开发语言·python
Flynt6 小时前
日涨4000星的OSINT工具,我拿Linus的用户名和一个随机字符串实测了一遍
python·安全
Evand J7 小时前
【MATLAB例程介绍】(17)永磁同步电机(PMSM)基于自适应无迹卡尔曼滤波(AUKF)的电流噪声在线估计。测量噪声协方差自适应与转速估计对比仿真
开发语言·matlab·卡尔曼滤波·无迹卡尔曼滤波·pmsm·电机滤波
BaiPeter8 小时前
ZPL文件预览
开发语言·c++
曲径海盗8 小时前
【Python 学习第 53 天】列表基础
python·学习笔记·编程入门
Dumbness9 小时前
群里 @ 机器人发"查订单",指令一条都没命中:微信群机器人在路由前漏掉的几步归一化
python·微信
用户1614840955459 小时前
用 M4 Pro 跑羽毛球视频 AI 分析(二):TrackNet MPS 加速 3.2 倍、卡尔曼滤波补漏与自动回合剪辑
python