本文将手把手教你将 FastAPI 项目完整 Cython 化,确保生产环境安全运行,同时性能不降反升。 

用 Cython 加密 FastAPI 项目的完整教程(可部署运行)

📁 项目结构

cython_fastapi/
│
├── main.py             # 原始 FastAPI 应用(待加密)
├── run.py              # 引用编译后的 `.so` 文件运行
├── setup.py            # Cython 编译脚本
├── requirements.txt    # 安装依赖
└── README.md

① 编写 FastAPI 应用(main.py

# main.py
from fastapi import FastAPI

app = FastAPI()

@app.get("/")
def read_root():
    return {"message": "Hello from encrypted FastAPI"}

② 编写桥接文件(run.py

# run.py
from main import app  # 注意:后续是从 .so 文件中导入的 main

# 用于 uvicorn 启动

③ 创建编译脚本(setup.py

# setup.py
from setuptools import setup
from setuptools.extension import Extension
from Cython.Build import cythonize

setup(
    ext_modules=cythonize([
        Extension("main", ["main.py"])
    ], compiler_directives={"language_level": "3"}),
)

④ 安装依赖(requirements.txt

fastapi
uvicorn
cython
setuptools

安装:

pip install -r requirements.txt

⑤ 编译成 .so 文件

运行命令:

python setup.py build_ext --inplace

编译完成后会生成:

main.cpython-311-x86_64-linux-gnu.so

你可以删除源码:

rm main.py

⚠️ run.py 依然可以通过 .so 文件导入 main.app


⑥ 启动服务

使用以下命令启动:

uvicorn run:app --reload

访问接口:

http://127.0.0.1:8000/

返回 JSON:

{"message": "Hello from encrypted FastAPI"}

🔁 补充说明

描述
.pyx 如果你希望进一步混淆源代码,可以将 main.py 改为 main.pyx
多模块 所有模块都可以以相同方式加密,只需在 setup.py 中添加多个 Extension
安全性 Cython 编译并不能完全防止反编译,但比明文 .py 好得多
Docker 可放入 Docker 中构建并打包 .so 文件,更安全

✅ 最终打包后的文件结构如下

cython_fastapi/
├── main.cpython-311-x86_64-linux-gnu.so  # 加密后的代码
├── run.py
├── setup.py
└── requirements.txt
Logo

Agent 垂直技术社区,欢迎活跃、内容共建。

更多推荐