Name | rpze JSON |
Version |
0.2.3
JSON |
| download |
home_page | None |
Summary | rpze: Remote Python, Zombie: Endless |
upload_time | 2024-10-11 08:19:24 |
maintainer | None |
docs_url | None |
author | ObeliskGate |
requires_python | >=3.11 |
license | None |
keywords |
pvz
|
VCS |
|
bugtrack_url |
|
requirements |
No requirements were recorded.
|
Travis-CI |
No Travis.
|
coveralls test coverage |
No coveralls.
|
# rpze
Remote Python, Zombie Endless (or endless rp?)
一个远程 Python 的 Plants vs. Zombies (pvz) TAS / 修改器 及 I, Zombie Endless (ize) 测试框架.
## 介绍
rpze 是一个用于 ize 测试的框架, 旨在保持一定性能、高精度、少崩溃的同时大幅简化 ize 非定态测试脚本的编写.
通过与注入游戏的`.dll`进行 ipc 以实现理论100%精度和不崩溃的原版函数调用.
## 支持平台
仅支持 Windows 上的 CPython >= 3.11:
- 3.11及以上的 CPython 仅支持 **Windows 10 及以上**平台
- [pypi](https://pypi.org/project/rpze/) 上提供了64位 cp311, cp312 的预编译`.whl`.
- 32位平台原则上支持, 但需要自行[构建](#构建)
仅支持1.0.0.1051版本 pvz , 测试以[ pt 站上的英语原版 (lcx 版)](https://pvz.tools/download/)为准. 原则上支持各类汉化版, **不支持 [jspvz](http://jspvz.com/download.htm) 上的英语原版.** 各种其他来源的“英语原版”有不小概率出自 jspvz 或者同样没去登录壳, 请注意.
## 安装
在满足上述平台要求后, 执行`python -m pip install rpze`即可.
若想确认安装成功, 执行`python -m rpze --path "your\path\to\PlantVsZombies.exe"`, 若游戏正常启动且在加载界面加载到一半时自动运行生物钟脚本, 则安装成功.
### 常见安装 FAQ
> 为什么弹出一个黑色窗口显示 console set?
这是正常现象, 无须多注意. 用于确认成功以及在跳帧时关闭游戏等.
> 游戏正常启动但并不自动运行脚本 / invalid command / failed to find shared memory?
重新阅读[支持平台](#支持平台). 请考虑你使用的版本是否符合上述要求. 请注意, **仅确保兼容 [lcx 版](https://pvz.tools/download/)!!!**
> failed to create shared memory / 未找到文件?
请再运行一次试试, 可能和杀毒有关; 若一直这样请和我反馈.
> xmake is not installed?
重新阅读[支持平台](#支持平台). 你使用的 Python 没有预编译`.whl`, 你可以选择**换一个 Python** 或者[构建](#构建).
> DLL load failed while importing rp_extend?
原因未知, 请跟我反馈. 一定有效但非常麻烦的方法是自行[构建](#构建), 一个不确定是否好用的解决方法是`python -m pip install msvc-runtime`.
> 怎么联系?
加 QQ 群 884871715 或通过 GitHub issue / pr.
## 使用
一个简单的完整 rpze 脚本示例如下:
```python
from rpze.iztest import *
with InjectedGame(r"your\path\to\pvz.exe") as game:
iz_test = IzTest(game.controller).init_by_str('''
1000 -1
3-0 4-0 5-0 3-3
.....
.....
bs3_c
b2ljh
blyl_
cg cg xg ww
0 1 300 700
4-6 4-6 4-6 4-6''')
print(iz_test.start_test(True))
```
## 结构
总体分成五个包:
- `rp_extend`: 对控制 pvz 游戏本地运作的基本操作的封装
- `basic`: `.dll`注入, 游戏启动, 汇编代码等基础功能
- `structs`: pvz 内数据结构以及部分 method 的的封装
- `flow`: coroutine-like 测试编写相关的函数
- `iztest`: `IzTest`测试功能以及工具函数
- `examples`: `iztest`编写例子
其中, 若仅对 Python pvz 框架感兴趣则只需关注前三个包, 对 ize 测试感兴趣则着重模仿`examples`并大致了解`structs`的成员(`Plants`和`Zombies`).
## 优缺点
优点:
- 使用普及度最高的 Python 编写, 尽可能做到低上手难度
- 稳定性大幅领先几乎所有远程工具, 并且实现100%精度
- 作为普通 Python 包发布, 无须编译 C++ 繁琐的配置环境
- 相比于 AvZ 等方案更能和原有语言生态整合, 可以简单直接引用外部库, 处理测得数据等
- 兼容过去的 [iztools](https://github.com/sqrt07/iztools) 工具以及各类简写, 对已有习惯友好
缺点:
- 跳帧性能不如 [AvZ](https://github.com/vector-wlc/AsmVsZombies), [iztools](https://github.com/sqrt07/iztools) 等注入框架
- 相比于向`.exe`静态添加汇编和`.dll`注入等方案, 不够原生而存在大量性能浪费.
- 支持平台过少 (>=win10, >=cpy311) 使得大量 win7 玩家无法使用
- 对 ize 以外模式的键控暂无支持, 操控游戏底层实现(如跳帧)可能因为和`Board`耦合过高而不够通用.
- 作者太菜了, 对软件工程和操作系统变成没有基本认知, 会存在大量浪费时间的试错和重构
## 鸣谢
[Reisen](https://github.com/alumkal) - 提供初始思路, 模型以及解答各种问题,
[63enjoy](https://github.com/POP63enjoy), [Ghastasaucey(BiliBili)](https://space.bilibili.com/384775811) 等 - 反汇编结论参考以及教学,
[vector-wlc/AsmVsZombies](https://github.com/vector-wlc/AsmVsZombies) - 重要功能汇编函数参考,
[sqrt07/iztools](https://github.com/sqrt07/iztools) - 测试字符串, 功能和简写标准参照,
以及指针表, 函数表等资源工具和各位玩家的鼎力支持.
## 使用的开源项目
- [pybind/pybind11](https://github.com/pybind/pybind11), [LICENSE](https://github.com/pybind/pybind11/blob/master/LICENSE)
- [TsudaKageyu/minhook](https://github.com/TsudaKageyu/minhook), [LICENSE](https://github.com/TsudaKageyu/minhook/blob/master/LICENSE.txt)
- [keystone-engine/keystone](https://github.com/keystone-engine/keystone), [FOSS License Exception](https://github.com/keystone-engine/keystone/blob/master/EXCEPTIONS-CLIENT)
## 构建
> 100% certified works on my two machines
本框架采用 [xmake](https://xmake.io) 构建, 管理二进制依赖; 使用 MSVC 编译.
安装二者后, 构建 Python `.whl`只需`python -m pip install build`后`python -m build`即可.
可以用`python hatch_build.py -other_xmake_args`来自动设置 xmake config 的编译 arch
## 贡献
*请向 `dev`分支提交pull request*, 请遵循 [PEP 8](https://peps.python.org/pep-0008/) 和项目原有的命名, 文档规范.
作者个人强行规定的规范包括但不限于:
- `import`本项目内文件请使用相对导入
- 标准库`import`与本项目`import`间空一行
- 请勿使用中文标点
- 单下划线即标识 protected , 不确保兼容性
- 所有 public 函数均需有 type hint 与 docstring
- 0 warning, 受不了的可以加`# type: ignore`或`# noqa`等
作者水平很菜但热爱吹毛求疵, 请不要感到气馁, 他真的很欢迎每一个帮助本项目越来越好的人.
## 许可
Copyright © 2024 ObeliskGate
This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version.
This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.
You should have received a copy of the GNU General Public License along with this program. If not, see https://www.gnu.org/licenses/.
Raw data
{
"_id": null,
"home_page": null,
"name": "rpze",
"maintainer": null,
"docs_url": null,
"requires_python": ">=3.11",
"maintainer_email": null,
"keywords": "pvz",
"author": "ObeliskGate",
"author_email": null,
"download_url": "https://files.pythonhosted.org/packages/13/8a/22476e92792023c2f71487145825b2001e7b93e6fc14346d24bb098f82c2/rpze-0.2.3.tar.gz",
"platform": null,
"description": "# rpze\n\nRemote Python, Zombie Endless (or endless rp?)\n\n\u4e00\u4e2a\u8fdc\u7a0b Python \u7684 Plants vs. Zombies (pvz) TAS / \u4fee\u6539\u5668 \u53ca I, Zombie Endless (ize) \u6d4b\u8bd5\u6846\u67b6.\n\n## \u4ecb\u7ecd\n\nrpze \u662f\u4e00\u4e2a\u7528\u4e8e ize \u6d4b\u8bd5\u7684\u6846\u67b6, \u65e8\u5728\u4fdd\u6301\u4e00\u5b9a\u6027\u80fd\u3001\u9ad8\u7cbe\u5ea6\u3001\u5c11\u5d29\u6e83\u7684\u540c\u65f6\u5927\u5e45\u7b80\u5316 ize \u975e\u5b9a\u6001\u6d4b\u8bd5\u811a\u672c\u7684\u7f16\u5199. \n\u901a\u8fc7\u4e0e\u6ce8\u5165\u6e38\u620f\u7684`.dll`\u8fdb\u884c ipc \u4ee5\u5b9e\u73b0\u7406\u8bba100%\u7cbe\u5ea6\u548c\u4e0d\u5d29\u6e83\u7684\u539f\u7248\u51fd\u6570\u8c03\u7528.\n\n## \u652f\u6301\u5e73\u53f0\n\u4ec5\u652f\u6301 Windows \u4e0a\u7684 CPython >= 3.11:\n- 3.11\u53ca\u4ee5\u4e0a\u7684 CPython \u4ec5\u652f\u6301 **Windows 10 \u53ca\u4ee5\u4e0a**\u5e73\u53f0\n- [pypi](https://pypi.org/project/rpze/) \u4e0a\u63d0\u4f9b\u4e8664\u4f4d cp311, cp312 \u7684\u9884\u7f16\u8bd1`.whl`.\n- 32\u4f4d\u5e73\u53f0\u539f\u5219\u4e0a\u652f\u6301, \u4f46\u9700\u8981\u81ea\u884c[\u6784\u5efa](#\u6784\u5efa)\n\n\u4ec5\u652f\u63011.0.0.1051\u7248\u672c pvz , \u6d4b\u8bd5\u4ee5[ pt \u7ad9\u4e0a\u7684\u82f1\u8bed\u539f\u7248 (lcx \u7248)](https://pvz.tools/download/)\u4e3a\u51c6. \u539f\u5219\u4e0a\u652f\u6301\u5404\u7c7b\u6c49\u5316\u7248, **\u4e0d\u652f\u6301 [jspvz](http://jspvz.com/download.htm) \u4e0a\u7684\u82f1\u8bed\u539f\u7248.** \u5404\u79cd\u5176\u4ed6\u6765\u6e90\u7684\u201c\u82f1\u8bed\u539f\u7248\u201d\u6709\u4e0d\u5c0f\u6982\u7387\u51fa\u81ea jspvz \u6216\u8005\u540c\u6837\u6ca1\u53bb\u767b\u5f55\u58f3, \u8bf7\u6ce8\u610f.\n\n## \u5b89\u88c5\n\u5728\u6ee1\u8db3\u4e0a\u8ff0\u5e73\u53f0\u8981\u6c42\u540e, \u6267\u884c`python -m pip install rpze`\u5373\u53ef. \n\u82e5\u60f3\u786e\u8ba4\u5b89\u88c5\u6210\u529f, \u6267\u884c`python -m rpze --path \"your\\path\\to\\PlantVsZombies.exe\"`, \u82e5\u6e38\u620f\u6b63\u5e38\u542f\u52a8\u4e14\u5728\u52a0\u8f7d\u754c\u9762\u52a0\u8f7d\u5230\u4e00\u534a\u65f6\u81ea\u52a8\u8fd0\u884c\u751f\u7269\u949f\u811a\u672c, \u5219\u5b89\u88c5\u6210\u529f.\n### \u5e38\u89c1\u5b89\u88c5 FAQ\n\n> \u4e3a\u4ec0\u4e48\u5f39\u51fa\u4e00\u4e2a\u9ed1\u8272\u7a97\u53e3\u663e\u793a console set? \n\n\u8fd9\u662f\u6b63\u5e38\u73b0\u8c61, \u65e0\u987b\u591a\u6ce8\u610f. \u7528\u4e8e\u786e\u8ba4\u6210\u529f\u4ee5\u53ca\u5728\u8df3\u5e27\u65f6\u5173\u95ed\u6e38\u620f\u7b49.\n\n> \u6e38\u620f\u6b63\u5e38\u542f\u52a8\u4f46\u5e76\u4e0d\u81ea\u52a8\u8fd0\u884c\u811a\u672c / invalid command / failed to find shared memory?\n\n\u91cd\u65b0\u9605\u8bfb[\u652f\u6301\u5e73\u53f0](#\u652f\u6301\u5e73\u53f0). \u8bf7\u8003\u8651\u4f60\u4f7f\u7528\u7684\u7248\u672c\u662f\u5426\u7b26\u5408\u4e0a\u8ff0\u8981\u6c42. \u8bf7\u6ce8\u610f, **\u4ec5\u786e\u4fdd\u517c\u5bb9 [lcx \u7248](https://pvz.tools/download/)!!!**\n\n> failed to create shared memory / \u672a\u627e\u5230\u6587\u4ef6?\n\n\u8bf7\u518d\u8fd0\u884c\u4e00\u6b21\u8bd5\u8bd5, \u53ef\u80fd\u548c\u6740\u6bd2\u6709\u5173; \u82e5\u4e00\u76f4\u8fd9\u6837\u8bf7\u548c\u6211\u53cd\u9988.\n\n> xmake is not installed?\n\n\u91cd\u65b0\u9605\u8bfb[\u652f\u6301\u5e73\u53f0](#\u652f\u6301\u5e73\u53f0). \u4f60\u4f7f\u7528\u7684 Python \u6ca1\u6709\u9884\u7f16\u8bd1`.whl`, \u4f60\u53ef\u4ee5\u9009\u62e9**\u6362\u4e00\u4e2a Python** \u6216\u8005[\u6784\u5efa](#\u6784\u5efa).\n\n> DLL load failed while importing rp_extend?\n\n\u539f\u56e0\u672a\u77e5, \u8bf7\u8ddf\u6211\u53cd\u9988. \u4e00\u5b9a\u6709\u6548\u4f46\u975e\u5e38\u9ebb\u70e6\u7684\u65b9\u6cd5\u662f\u81ea\u884c[\u6784\u5efa](#\u6784\u5efa), \u4e00\u4e2a\u4e0d\u786e\u5b9a\u662f\u5426\u597d\u7528\u7684\u89e3\u51b3\u65b9\u6cd5\u662f`python -m pip install msvc-runtime`.\n\n> \u600e\u4e48\u8054\u7cfb?\n\n\u52a0 QQ \u7fa4 884871715 \u6216\u901a\u8fc7 GitHub issue / pr.\n\n\n## \u4f7f\u7528\n \u4e00\u4e2a\u7b80\u5355\u7684\u5b8c\u6574 rpze \u811a\u672c\u793a\u4f8b\u5982\u4e0b:\n```python\nfrom rpze.iztest import *\n\nwith InjectedGame(r\"your\\path\\to\\pvz.exe\") as game:\n iz_test = IzTest(game.controller).init_by_str('''\n 1000 -1\n 3-0 4-0 5-0 3-3\n .....\n .....\n bs3_c\n b2ljh\n blyl_\n cg cg xg ww\n 0 1 300 700\n 4-6 4-6 4-6 4-6''')\n print(iz_test.start_test(True))\n```\n\n## \u7ed3\u6784\n\u603b\u4f53\u5206\u6210\u4e94\u4e2a\u5305:\n- `rp_extend`: \u5bf9\u63a7\u5236 pvz \u6e38\u620f\u672c\u5730\u8fd0\u4f5c\u7684\u57fa\u672c\u64cd\u4f5c\u7684\u5c01\u88c5\n- `basic`: `.dll`\u6ce8\u5165, \u6e38\u620f\u542f\u52a8, \u6c47\u7f16\u4ee3\u7801\u7b49\u57fa\u7840\u529f\u80fd\n- `structs`: pvz \u5185\u6570\u636e\u7ed3\u6784\u4ee5\u53ca\u90e8\u5206 method \u7684\u7684\u5c01\u88c5\n- `flow`: coroutine-like \u6d4b\u8bd5\u7f16\u5199\u76f8\u5173\u7684\u51fd\u6570\n- `iztest`: `IzTest`\u6d4b\u8bd5\u529f\u80fd\u4ee5\u53ca\u5de5\u5177\u51fd\u6570\n- `examples`: `iztest`\u7f16\u5199\u4f8b\u5b50\n\n\u5176\u4e2d, \u82e5\u4ec5\u5bf9 Python pvz \u6846\u67b6\u611f\u5174\u8da3\u5219\u53ea\u9700\u5173\u6ce8\u524d\u4e09\u4e2a\u5305, \u5bf9 ize \u6d4b\u8bd5\u611f\u5174\u8da3\u5219\u7740\u91cd\u6a21\u4eff`examples`\u5e76\u5927\u81f4\u4e86\u89e3`structs`\u7684\u6210\u5458(`Plants`\u548c`Zombies`).\n\n\n## \u4f18\u7f3a\u70b9\n\u4f18\u70b9:\n- \u4f7f\u7528\u666e\u53ca\u5ea6\u6700\u9ad8\u7684 Python \u7f16\u5199, \u5c3d\u53ef\u80fd\u505a\u5230\u4f4e\u4e0a\u624b\u96be\u5ea6\n- \u7a33\u5b9a\u6027\u5927\u5e45\u9886\u5148\u51e0\u4e4e\u6240\u6709\u8fdc\u7a0b\u5de5\u5177, \u5e76\u4e14\u5b9e\u73b0100%\u7cbe\u5ea6\n- \u4f5c\u4e3a\u666e\u901a Python \u5305\u53d1\u5e03, \u65e0\u987b\u7f16\u8bd1 C++ \u7e41\u7410\u7684\u914d\u7f6e\u73af\u5883\n- \u76f8\u6bd4\u4e8e AvZ \u7b49\u65b9\u6848\u66f4\u80fd\u548c\u539f\u6709\u8bed\u8a00\u751f\u6001\u6574\u5408, \u53ef\u4ee5\u7b80\u5355\u76f4\u63a5\u5f15\u7528\u5916\u90e8\u5e93, \u5904\u7406\u6d4b\u5f97\u6570\u636e\u7b49\n- \u517c\u5bb9\u8fc7\u53bb\u7684 [iztools](https://github.com/sqrt07/iztools) \u5de5\u5177\u4ee5\u53ca\u5404\u7c7b\u7b80\u5199, \u5bf9\u5df2\u6709\u4e60\u60ef\u53cb\u597d\n\n\u7f3a\u70b9:\n- \u8df3\u5e27\u6027\u80fd\u4e0d\u5982 [AvZ](https://github.com/vector-wlc/AsmVsZombies), [iztools](https://github.com/sqrt07/iztools) \u7b49\u6ce8\u5165\u6846\u67b6\n- \u76f8\u6bd4\u4e8e\u5411`.exe`\u9759\u6001\u6dfb\u52a0\u6c47\u7f16\u548c`.dll`\u6ce8\u5165\u7b49\u65b9\u6848, \u4e0d\u591f\u539f\u751f\u800c\u5b58\u5728\u5927\u91cf\u6027\u80fd\u6d6a\u8d39.\n- \u652f\u6301\u5e73\u53f0\u8fc7\u5c11 (>=win10, >=cpy311) \u4f7f\u5f97\u5927\u91cf win7 \u73a9\u5bb6\u65e0\u6cd5\u4f7f\u7528\n- \u5bf9 ize \u4ee5\u5916\u6a21\u5f0f\u7684\u952e\u63a7\u6682\u65e0\u652f\u6301, \u64cd\u63a7\u6e38\u620f\u5e95\u5c42\u5b9e\u73b0(\u5982\u8df3\u5e27)\u53ef\u80fd\u56e0\u4e3a\u548c`Board`\u8026\u5408\u8fc7\u9ad8\u800c\u4e0d\u591f\u901a\u7528.\n- \u4f5c\u8005\u592a\u83dc\u4e86, \u5bf9\u8f6f\u4ef6\u5de5\u7a0b\u548c\u64cd\u4f5c\u7cfb\u7edf\u53d8\u6210\u6ca1\u6709\u57fa\u672c\u8ba4\u77e5, \u4f1a\u5b58\u5728\u5927\u91cf\u6d6a\u8d39\u65f6\u95f4\u7684\u8bd5\u9519\u548c\u91cd\u6784\n\n## \u9e23\u8c22\n[Reisen](https://github.com/alumkal) - \u63d0\u4f9b\u521d\u59cb\u601d\u8def, \u6a21\u578b\u4ee5\u53ca\u89e3\u7b54\u5404\u79cd\u95ee\u9898, \n[63enjoy](https://github.com/POP63enjoy), [Ghastasaucey(BiliBili)](https://space.bilibili.com/384775811) \u7b49 - \u53cd\u6c47\u7f16\u7ed3\u8bba\u53c2\u8003\u4ee5\u53ca\u6559\u5b66, \n[vector-wlc/AsmVsZombies](https://github.com/vector-wlc/AsmVsZombies) - \u91cd\u8981\u529f\u80fd\u6c47\u7f16\u51fd\u6570\u53c2\u8003, \n[sqrt07/iztools](https://github.com/sqrt07/iztools) - \u6d4b\u8bd5\u5b57\u7b26\u4e32, \u529f\u80fd\u548c\u7b80\u5199\u6807\u51c6\u53c2\u7167,\n\n\u4ee5\u53ca\u6307\u9488\u8868, \u51fd\u6570\u8868\u7b49\u8d44\u6e90\u5de5\u5177\u548c\u5404\u4f4d\u73a9\u5bb6\u7684\u9f0e\u529b\u652f\u6301.\n\n## \u4f7f\u7528\u7684\u5f00\u6e90\u9879\u76ee\n- [pybind/pybind11](https://github.com/pybind/pybind11), [LICENSE](https://github.com/pybind/pybind11/blob/master/LICENSE)\n- [TsudaKageyu/minhook](https://github.com/TsudaKageyu/minhook), [LICENSE](https://github.com/TsudaKageyu/minhook/blob/master/LICENSE.txt)\n- [keystone-engine/keystone](https://github.com/keystone-engine/keystone), [FOSS License Exception](https://github.com/keystone-engine/keystone/blob/master/EXCEPTIONS-CLIENT)\n\n## \u6784\u5efa\n> 100% certified works on my two machines\n\n\u672c\u6846\u67b6\u91c7\u7528 [xmake](https://xmake.io) \u6784\u5efa, \u7ba1\u7406\u4e8c\u8fdb\u5236\u4f9d\u8d56; \u4f7f\u7528 MSVC \u7f16\u8bd1.\n\n\u5b89\u88c5\u4e8c\u8005\u540e, \u6784\u5efa Python `.whl`\u53ea\u9700`python -m pip install build`\u540e`python -m build`\u5373\u53ef.\n\n\u53ef\u4ee5\u7528`python hatch_build.py -other_xmake_args`\u6765\u81ea\u52a8\u8bbe\u7f6e xmake config \u7684\u7f16\u8bd1 arch\n\n## \u8d21\u732e\n*\u8bf7\u5411 `dev`\u5206\u652f\u63d0\u4ea4pull request*, \u8bf7\u9075\u5faa [PEP 8](https://peps.python.org/pep-0008/) \u548c\u9879\u76ee\u539f\u6709\u7684\u547d\u540d, \u6587\u6863\u89c4\u8303.\n\n\u4f5c\u8005\u4e2a\u4eba\u5f3a\u884c\u89c4\u5b9a\u7684\u89c4\u8303\u5305\u62ec\u4f46\u4e0d\u9650\u4e8e:\n- `import`\u672c\u9879\u76ee\u5185\u6587\u4ef6\u8bf7\u4f7f\u7528\u76f8\u5bf9\u5bfc\u5165\n- \u6807\u51c6\u5e93`import`\u4e0e\u672c\u9879\u76ee`import`\u95f4\u7a7a\u4e00\u884c\n- \u8bf7\u52ff\u4f7f\u7528\u4e2d\u6587\u6807\u70b9\n- \u5355\u4e0b\u5212\u7ebf\u5373\u6807\u8bc6 protected , \u4e0d\u786e\u4fdd\u517c\u5bb9\u6027\n- \u6240\u6709 public \u51fd\u6570\u5747\u9700\u6709 type hint \u4e0e docstring\n- 0 warning, \u53d7\u4e0d\u4e86\u7684\u53ef\u4ee5\u52a0`# type: ignore`\u6216`# noqa`\u7b49\n\n\u4f5c\u8005\u6c34\u5e73\u5f88\u83dc\u4f46\u70ed\u7231\u5439\u6bdb\u6c42\u75b5, \u8bf7\u4e0d\u8981\u611f\u5230\u6c14\u9981, \u4ed6\u771f\u7684\u5f88\u6b22\u8fce\u6bcf\u4e00\u4e2a\u5e2e\u52a9\u672c\u9879\u76ee\u8d8a\u6765\u8d8a\u597d\u7684\u4eba.\n\n## \u8bb8\u53ef\nCopyright \u00a9 2024 ObeliskGate\n\nThis program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version.\n\nThis program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\nYou should have received a copy of the GNU General Public License along with this program. If not, see https://www.gnu.org/licenses/.",
"bugtrack_url": null,
"license": null,
"summary": "rpze: Remote Python, Zombie: Endless",
"version": "0.2.3",
"project_urls": {
"Repository": "https://github.com/ObeliskGate/rpze.git"
},
"split_keywords": [
"pvz"
],
"urls": [
{
"comment_text": "",
"digests": {
"blake2b_256": "cc02ddd244278bb948307a21c8e3bf95967008d3bd0069fbca95e2c09c6effd5",
"md5": "bcaf679e2a381ba7037b3dcc41d20934",
"sha256": "9139cbb27a60ce0d9cda2c2f204fe88a823915d9287d5ded150da7cc862e94dc"
},
"downloads": -1,
"filename": "rpze-0.2.3-cp311-cp311-win_amd64.whl",
"has_sig": false,
"md5_digest": "bcaf679e2a381ba7037b3dcc41d20934",
"packagetype": "bdist_wheel",
"python_version": "cp311",
"requires_python": ">=3.11",
"size": 777533,
"upload_time": "2024-10-11T08:19:19",
"upload_time_iso_8601": "2024-10-11T08:19:19.524462Z",
"url": "https://files.pythonhosted.org/packages/cc/02/ddd244278bb948307a21c8e3bf95967008d3bd0069fbca95e2c09c6effd5/rpze-0.2.3-cp311-cp311-win_amd64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "5ca69605a047ae5ea657d4c927ae975d9fd9cca351fab4ac6ccdfb6221e23239",
"md5": "ba21f29fba061e03a9ed81215b19acf9",
"sha256": "a4b2f5af688bbc99b5d43a38642ed7ac49aee69f1cd9413d41e40fac111ee3e4"
},
"downloads": -1,
"filename": "rpze-0.2.3-cp312-cp312-win_amd64.whl",
"has_sig": false,
"md5_digest": "ba21f29fba061e03a9ed81215b19acf9",
"packagetype": "bdist_wheel",
"python_version": "cp312",
"requires_python": ">=3.11",
"size": 777963,
"upload_time": "2024-10-11T08:19:21",
"upload_time_iso_8601": "2024-10-11T08:19:21.484318Z",
"url": "https://files.pythonhosted.org/packages/5c/a6/9605a047ae5ea657d4c927ae975d9fd9cca351fab4ac6ccdfb6221e23239/rpze-0.2.3-cp312-cp312-win_amd64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "af3c3ef56f65890aad340024c13e87af2910503cd7b58535253f9dd400b07a1f",
"md5": "3e0f595106a95ae9c13c65dc288464dc",
"sha256": "7ecb82a0ac99944a3e2b5c495b37c5254cd92a34f49e32ea977d4935d0579089"
},
"downloads": -1,
"filename": "rpze-0.2.3-cp313-cp313-win_amd64.whl",
"has_sig": false,
"md5_digest": "3e0f595106a95ae9c13c65dc288464dc",
"packagetype": "bdist_wheel",
"python_version": "cp313",
"requires_python": ">=3.11",
"size": 777946,
"upload_time": "2024-10-11T08:19:23",
"upload_time_iso_8601": "2024-10-11T08:19:23.053053Z",
"url": "https://files.pythonhosted.org/packages/af/3c/3ef56f65890aad340024c13e87af2910503cd7b58535253f9dd400b07a1f/rpze-0.2.3-cp313-cp313-win_amd64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "138a22476e92792023c2f71487145825b2001e7b93e6fc14346d24bb098f82c2",
"md5": "d8d19319a2bb0724de6dd76bf75de87c",
"sha256": "87d5bb7a2605393502b2fb417ea09049073430228407ade2afa83231a4cf994f"
},
"downloads": -1,
"filename": "rpze-0.2.3.tar.gz",
"has_sig": false,
"md5_digest": "d8d19319a2bb0724de6dd76bf75de87c",
"packagetype": "sdist",
"python_version": "source",
"requires_python": ">=3.11",
"size": 77244,
"upload_time": "2024-10-11T08:19:24",
"upload_time_iso_8601": "2024-10-11T08:19:24.744667Z",
"url": "https://files.pythonhosted.org/packages/13/8a/22476e92792023c2f71487145825b2001e7b93e6fc14346d24bb098f82c2/rpze-0.2.3.tar.gz",
"yanked": false,
"yanked_reason": null
}
],
"upload_time": "2024-10-11 08:19:24",
"github": true,
"gitlab": false,
"bitbucket": false,
"codeberg": false,
"github_user": "ObeliskGate",
"github_project": "rpze",
"travis_ci": false,
"coveralls": false,
"github_actions": false,
"lcname": "rpze"
}