OpenMined/PySyft
GitHub: OpenMined/PySyft
PySyft 是一个隐私保护数据科学框架,让数据科学家能够对留在数据所有者服务器上的私有数据远程提交计算任务并获取结果。
Stars: 9926 | Forks: 1999
# PySyft v2
[](https://github.com/OpenMined/PySyft/actions/workflows/unit-tests.yml)
[](https://github.com/OpenMined/pysyft/actions/workflows/integration-tests.yml)
[](https://pypi.org/project/syft-client/)
[](https://github.com/OpenMined/pysyft)
[](https://github.com/OpenMined/pysyft/blob/main/pyproject.toml)
PySyft 允许数据科学家提交计算任务,由数据所有者在私有数据上运行——这一切都通过其组织已经在使用的云存储(Google Drive、Microsoft 365 等)来完成。无需新的基础设施。
## 文档
- [工作流](docs/workflow.md) — 端到端的隐私保护数据分析工作流
- [API 参考](docs/API.md) — 所有公开的客户端方法和属性
- [身份验证与设置](docs/auth.md) — 用于本地/Jupyter 的 Google Cloud OAuth 设置
- [后台服务](packages/syft-bg/README.md) — 电子邮件通知、自动批准和 TUI 仪表板
- [连接](docs/connections.md) — Google Drive 传输层的工作原理
- [权限](packages/syft-permissions/docs/permission-user-docs.md) - syft-client 的权限
- [Enclaves](packages/syft-enclave) - syft-client 的 Enclaves
## 功能
- **隐私保护** — 私有数据永远不会离开数据所有者的机器;仅共享已批准的结果
- **传输无关** — 目前可通过 Google Drive 使用,可扩展至任何基于文件的传输方式
- **离线优先** — 即使在对等方离线时也能提供完整功能;在恢复连接时同步更改
- **具有显式身份验证的点对点** — 在任何数据流动之前,数据所有者必须批准每个协作者
- **隔离的任务执行** — 任务在沙盒化的 Python 虚拟环境中运行,对私有数据的访问受到控制
- **具有模拟/私有分离的数据集共享** — 数据科学家探索模拟数据,然后提交在真实数据上运行的任务
## 快速开始
```
uv pip install syft-client
```
```
import syft_client as sc
```
```
# Login (colab auth, 对于非 colab 传入 token_path)
do = sc.login_do(email="do@org.com")
ds = sc.login_ds(email="ds@org.com")
# Peer 请求与批准
ds.add_peer("do@org.com")
do.approve_peer_request("ds@org.com")
# 创建与同步 dataset
do.create_dataset(
name="census",
mock_path="mock.txt",
private_path="private.txt",
users=["ds@org.com"],
)
do.sync(); ds.sync()
datasets = ds.datasets.get_all()
```
编写一个 `analysis.py` 来读取数据集并产生结果,在我们的示例中,这只是数据的长度。在任务中,`resolve_dataset_file_path` 会自动解析为**私有**数据:
```
# analysis.py
import json
import syft_client as sc
data_path = sc.resolve_dataset_file_path("census")
with open(data_path, "r") as f:
data = f.read()
with open("outputs/result.json", "w") as f:
json.dump({"length": len(data)}, f)
```
提交任务并检索结果:
```
# 提交 job
ds.submit_python_job(
user="do@org.com",
code_path="analysis.py",
)
ds.sync(); do.sync()
# Data owner 批准并运行 job
do.jobs[0].approve()
do.process_approved_jobs(share_outputs_with_submitter=True)
do.sync(); ds.sync()
result = open(ds.jobs[-1].output_paths[0]).read()
```
## 包
| 包 | 描述 |
| ----------------------------------------------- | --------------------------------------------- |
| [`syft-datasets`](packages/syft-datasets) | 数据集管理和共享 |
| [`syft-job`](packages/syft-job) | 任务提交和执行 |
| [`syft-permissions`](packages/syft-permissions) | Syft datasites 的权限系统 |
| [`syft-perms`](packages/syft-perms) | Syft datasites 面向用户的权限 API |
| [`syft-bg`](packages/syft-bg) | SyftBox 的后台服务 TUI 仪表板 |
| [`syft-notebook-ui`](packages/syft-notebook-ui) | Jupyter notebook 显示实用工具 |
## 开发
```
# 在开发模式下安装
uv pip install -e .
# 运行测试
just test-unit # Unit tests (fast, mocked)
just test-integration # Integration tests (slow, real API)
```
由 [OpenMined](https://openmined.org) 构建 — 致力于为隐私保护的数据科学和 AI 构建开源技术。
## 支持
有关 PySyft 的问题,请通过
Slack 上的 `#support` 频道联系我们。
# 关于 OpenMined
OpenMined 是一个非营利基金会,致力于创建技术基础设施,帮助研究人员无需副本或直接访问即可从数据中获取答案。我们的技术专家社区正在构建 Syft。
# License
[Apache License 2.0](LICENSE)
Person icons 由 Freepik - Flaticon 创建 标签:Apex, Python, 数据科学, 无后门, 机器学习, 网络安全, 联邦学习, 资源验证, 逆向工具, 隐私保护, 隐私计算