devtools-hub 2.6.0__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- devtools_hub-2.6.0/PKG-INFO +11 -0
- devtools_hub-2.6.0/README.md +166 -0
- devtools_hub-2.6.0/devtools_hub/__init__.py +1 -0
- devtools_hub-2.6.0/devtools_hub/cli.py +150 -0
- devtools_hub-2.6.0/devtools_hub/scanner.py +56 -0
- devtools_hub-2.6.0/devtools_hub/server.py +41 -0
- devtools_hub-2.6.0/devtools_hub.egg-info/PKG-INFO +11 -0
- devtools_hub-2.6.0/devtools_hub.egg-info/SOURCES.txt +13 -0
- devtools_hub-2.6.0/devtools_hub.egg-info/dependency_links.txt +1 -0
- devtools_hub-2.6.0/devtools_hub.egg-info/entry_points.txt +2 -0
- devtools_hub-2.6.0/devtools_hub.egg-info/requires.txt +3 -0
- devtools_hub-2.6.0/devtools_hub.egg-info/top_level.txt +1 -0
- devtools_hub-2.6.0/pyproject.toml +16 -0
- devtools_hub-2.6.0/setup.cfg +4 -0
- devtools_hub-2.6.0/setup.py +16 -0
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
|
+
Name: devtools-hub
|
|
3
|
+
Version: 2.6.0
|
|
4
|
+
Home-page: https://github.com/jingjing737/devtools-hub
|
|
5
|
+
Author: jingjing737
|
|
6
|
+
Requires-Python: >=3.7
|
|
7
|
+
Requires-Dist: flask
|
|
8
|
+
Requires-Dist: psutil
|
|
9
|
+
Requires-Dist: requests
|
|
10
|
+
Dynamic: author
|
|
11
|
+
Dynamic: home-page
|
|
@@ -0,0 +1,166 @@
|
|
|
1
|
+
# DevTools Hub 🔧
|
|
2
|
+
|
|
3
|
+
> A developer toolkit for system monitoring, process management, and performance testing.
|
|
4
|
+
> 开发者工具集 - 系统监控、进程管理、性能测试
|
|
5
|
+
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
## 📦 Installation | 安装
|
|
9
|
+
|
|
10
|
+
```bash
|
|
11
|
+
pip install devtools-hub
|
|
12
|
+
```
|
|
13
|
+
|
|
14
|
+
Or from source:
|
|
15
|
+
```bash
|
|
16
|
+
git clone https://github.com/jingjing737/devtools-hub.git
|
|
17
|
+
cd devtools-hub
|
|
18
|
+
pip install -e .
|
|
19
|
+
```
|
|
20
|
+
|
|
21
|
+
或从源码安装:
|
|
22
|
+
```bash
|
|
23
|
+
git clone https://github.com/jingjing737/devtools-hub.git
|
|
24
|
+
cd devtools-hub
|
|
25
|
+
pip install -e .
|
|
26
|
+
```
|
|
27
|
+
|
|
28
|
+
---
|
|
29
|
+
|
|
30
|
+
## ⌨️ Commands | 命令
|
|
31
|
+
|
|
32
|
+
| English | 中文 | Description |
|
|
33
|
+
|---------|------|-------------|
|
|
34
|
+
| `devtools` | devtools | Show help / 显示帮助 |
|
|
35
|
+
| `devtools start` | devtools start | Start service / 启动服务 |
|
|
36
|
+
| `devtools stop` | devtools stop | Stop service / 停止服务 |
|
|
37
|
+
| `devtools status` | devtools status | System status / 系统状态 |
|
|
38
|
+
| `devtools cpu` | devtools cpu | CPU info / CPU 信息 |
|
|
39
|
+
| `devtools mem` | devtools mem | Memory info / 内存信息 |
|
|
40
|
+
| `devtools disk` | devtools disk | Disk info / 磁盘信息 |
|
|
41
|
+
| `devtools net` | devtools net | Network speed / 网络速度 |
|
|
42
|
+
| `devtools top` | devtools top | Top processes / 高占用进程 |
|
|
43
|
+
| `devtools ports` | devtools ports | Port scanner / 端口扫描 |
|
|
44
|
+
| `devtools services` | devtools services | System services / 系统服务 |
|
|
45
|
+
| `devtools info` | devtools info | System info / 系统信息 |
|
|
46
|
+
| `devtools ip` | devtools ip | IP address / IP 地址 |
|
|
47
|
+
| `devtools bench` | devtools bench | Performance test / 性能测试 |
|
|
48
|
+
|
|
49
|
+
---
|
|
50
|
+
|
|
51
|
+
## 📊 Examples | 示例
|
|
52
|
+
|
|
53
|
+
### Port Scanner | 端口扫描
|
|
54
|
+
```bash
|
|
55
|
+
$ devtools ports
|
|
56
|
+
🔍 Scanning common ports...
|
|
57
|
+
✅ 22 (SSH) - open | 开放
|
|
58
|
+
✅ 80 (HTTP) - open | 开放
|
|
59
|
+
✅ 5001 (DevTools) - open | 开放
|
|
60
|
+
```
|
|
61
|
+
|
|
62
|
+
### IP Address | IP 地址
|
|
63
|
+
```bash
|
|
64
|
+
$ devtools ip
|
|
65
|
+
Host: MacBook-Air
|
|
66
|
+
IP: 192.168.1.100
|
|
67
|
+
```
|
|
68
|
+
|
|
69
|
+
### System Info | 系统信息
|
|
70
|
+
```bash
|
|
71
|
+
$ devtools info
|
|
72
|
+
System: Darwin 24.6.0
|
|
73
|
+
Host: MacBook-Air
|
|
74
|
+
Python: 3.14.0
|
|
75
|
+
|
|
76
|
+
$ devtools cpu
|
|
77
|
+
CPU: 45% Cores: 8
|
|
78
|
+
|
|
79
|
+
$ devtools mem
|
|
80
|
+
Memory: 62% Available: 6.1GB
|
|
81
|
+
```
|
|
82
|
+
|
|
83
|
+
### Top Processes | 高占用进程
|
|
84
|
+
```bash
|
|
85
|
+
$ devtools top
|
|
86
|
+
🔥 CPU:
|
|
87
|
+
python: 45.2%
|
|
88
|
+
chrome: 28.1%
|
|
89
|
+
💾 Memory:
|
|
90
|
+
chrome: 35.2%
|
|
91
|
+
python: 12.3%
|
|
92
|
+
```
|
|
93
|
+
|
|
94
|
+
### Performance Benchmark | 性能测试
|
|
95
|
+
```bash
|
|
96
|
+
$ devtools bench
|
|
97
|
+
{
|
|
98
|
+
"cpu_score": 245.3,
|
|
99
|
+
"memory_score": 189.2,
|
|
100
|
+
"disk_score": 312.8,
|
|
101
|
+
"total_score": 747.3
|
|
102
|
+
}
|
|
103
|
+
```
|
|
104
|
+
|
|
105
|
+
---
|
|
106
|
+
|
|
107
|
+
## 🐳 Docker
|
|
108
|
+
|
|
109
|
+
```bash
|
|
110
|
+
# Build | 构建
|
|
111
|
+
docker build -t devtools-hub .
|
|
112
|
+
|
|
113
|
+
# Run | 运行
|
|
114
|
+
docker run -d -p 5001:5001 devtools-hub
|
|
115
|
+
|
|
116
|
+
# Or use docker-compose | 或使用 docker-compose
|
|
117
|
+
docker-compose up -d
|
|
118
|
+
```
|
|
119
|
+
|
|
120
|
+
---
|
|
121
|
+
|
|
122
|
+
## 🔧 Development | 开发
|
|
123
|
+
|
|
124
|
+
```bash
|
|
125
|
+
# Install dependencies | 安装依赖
|
|
126
|
+
pip install -r requirements.txt
|
|
127
|
+
|
|
128
|
+
# Run server | 运行服务
|
|
129
|
+
python -m devtools_hub.server
|
|
130
|
+
|
|
131
|
+
# Run CLI | 运行 CLI
|
|
132
|
+
python -m devtools_hub.cli
|
|
133
|
+
|
|
134
|
+
# Run tests | 运行测试
|
|
135
|
+
python test_api.py
|
|
136
|
+
```
|
|
137
|
+
|
|
138
|
+
---
|
|
139
|
+
|
|
140
|
+
## 📁 Project Structure | 项目结构
|
|
141
|
+
|
|
142
|
+
```
|
|
143
|
+
devtools-hub/
|
|
144
|
+
├── devtools_hub/
|
|
145
|
+
│ ├── __init__.py
|
|
146
|
+
│ ├── cli.py # CLI entry | CLI 入口
|
|
147
|
+
│ ├── server.py # Flask server | Flask 服务
|
|
148
|
+
│ └── scanner.py # Port scanner | 端口扫描
|
|
149
|
+
├── setup.py
|
|
150
|
+
├── pyproject.toml
|
|
151
|
+
├── Dockerfile
|
|
152
|
+
├── docker-compose.yml
|
|
153
|
+
└── README.md
|
|
154
|
+
```
|
|
155
|
+
|
|
156
|
+
---
|
|
157
|
+
|
|
158
|
+
## 📝 License | 许可证
|
|
159
|
+
|
|
160
|
+
MIT License
|
|
161
|
+
|
|
162
|
+
---
|
|
163
|
+
|
|
164
|
+
**GitHub**: https://github.com/jingjing737/devtools-hub
|
|
165
|
+
**PyPI**: https://pypi.org/project/devtools-hub/
|
|
166
|
+
**Version**: v2.6.0
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
__version__ = "2.5.0"
|
|
@@ -0,0 +1,150 @@
|
|
|
1
|
+
#!/usr/bin/env python3
|
|
2
|
+
"""DevTools Hub CLI"""
|
|
3
|
+
import sys
|
|
4
|
+
import subprocess
|
|
5
|
+
import json
|
|
6
|
+
import time
|
|
7
|
+
import platform
|
|
8
|
+
|
|
9
|
+
PORT = 5001
|
|
10
|
+
URL = f"http://localhost:{PORT}"
|
|
11
|
+
|
|
12
|
+
def check():
|
|
13
|
+
try:
|
|
14
|
+
import requests
|
|
15
|
+
r = requests.get(f"{URL}/api/health", timeout=1)
|
|
16
|
+
return r.ok
|
|
17
|
+
except:
|
|
18
|
+
return False
|
|
19
|
+
|
|
20
|
+
def main():
|
|
21
|
+
if len(sys.argv) < 2:
|
|
22
|
+
print("""
|
|
23
|
+
🔧 DevTools Hub - 开发者工具集
|
|
24
|
+
|
|
25
|
+
用法: devtools <命令>
|
|
26
|
+
|
|
27
|
+
命令:
|
|
28
|
+
start 启动服务
|
|
29
|
+
stop 停止服务
|
|
30
|
+
status 系统状态
|
|
31
|
+
cpu CPU 信息
|
|
32
|
+
mem 内存信息
|
|
33
|
+
disk 磁盘信息
|
|
34
|
+
net 网络速度
|
|
35
|
+
top 高占用进程
|
|
36
|
+
ports 端口扫描
|
|
37
|
+
services 系统服务
|
|
38
|
+
info 系统信息
|
|
39
|
+
ip IP 地址
|
|
40
|
+
bench 性能测试
|
|
41
|
+
""")
|
|
42
|
+
return
|
|
43
|
+
|
|
44
|
+
cmd = sys.argv[1]
|
|
45
|
+
|
|
46
|
+
if cmd == "start":
|
|
47
|
+
print("🚀 启动服务...")
|
|
48
|
+
subprocess.Popen([sys.executable, "-m", "devtools_hub.server"],
|
|
49
|
+
stdout=subprocess.DEVNULL, stderr=subprocess.DEVNULL)
|
|
50
|
+
time.sleep(2)
|
|
51
|
+
print(f"✅ 已启动: {URL}")
|
|
52
|
+
|
|
53
|
+
elif cmd == "stop":
|
|
54
|
+
subprocess.run(["pkill", "-f", "devtools_hub.server"])
|
|
55
|
+
print("✅ 已停止")
|
|
56
|
+
|
|
57
|
+
elif cmd == "status":
|
|
58
|
+
if check():
|
|
59
|
+
import requests
|
|
60
|
+
r = requests.get(f"{URL}/api/health")
|
|
61
|
+
print(json.dumps(r.json(), indent=2))
|
|
62
|
+
else:
|
|
63
|
+
print("❌ 服务未运行,请先 devtools start")
|
|
64
|
+
|
|
65
|
+
elif cmd == "cpu":
|
|
66
|
+
import psutil
|
|
67
|
+
print(f"CPU: {psutil.cpu_percent()}% 核心: {psutil.cpu_count()}")
|
|
68
|
+
|
|
69
|
+
elif cmd == "mem":
|
|
70
|
+
import psutil
|
|
71
|
+
m = psutil.virtual_memory()
|
|
72
|
+
print(f"内存: {m.percent}% 可用: {m.available/1024**3:.1f}GB")
|
|
73
|
+
|
|
74
|
+
elif cmd == "disk":
|
|
75
|
+
import psutil
|
|
76
|
+
d = psutil.disk_usage('/')
|
|
77
|
+
print(f"磁盘: {d.percent}% 可用: {d.free/1024**3:.1f}GB")
|
|
78
|
+
|
|
79
|
+
elif cmd == "net":
|
|
80
|
+
if check():
|
|
81
|
+
import requests
|
|
82
|
+
r = requests.get(f"{URL}/api/network/bandwidth")
|
|
83
|
+
d = r.json()
|
|
84
|
+
print(f"↑{d.get('upload_mbps', 0)} Mbps ↓{d.get('download_mbps', 0)} Mbps")
|
|
85
|
+
else:
|
|
86
|
+
print("❌ 服务未运行")
|
|
87
|
+
|
|
88
|
+
elif cmd == "top":
|
|
89
|
+
import psutil
|
|
90
|
+
procs = []
|
|
91
|
+
for p in psutil.process_iter(['name', 'cpu_percent', 'memory_percent']):
|
|
92
|
+
try:
|
|
93
|
+
procs.append(p.info)
|
|
94
|
+
except:
|
|
95
|
+
pass
|
|
96
|
+
by_cpu = sorted(procs, key=lambda x: x['cpu_percent'] or 0, reverse=True)[:5]
|
|
97
|
+
by_mem = sorted(procs, key=lambda x: x['memory_percent'] or 0, reverse=True)[:5]
|
|
98
|
+
print("🔥 CPU:")
|
|
99
|
+
for p in by_cpu:
|
|
100
|
+
print(f" {p['name']}: {p['cpu_percent']}%")
|
|
101
|
+
print("💾 内存:")
|
|
102
|
+
for p in by_mem:
|
|
103
|
+
print(f" {p['name']}: {p['memory_percent']}%")
|
|
104
|
+
|
|
105
|
+
elif cmd == "ports":
|
|
106
|
+
from devtools_hub.scanner import scan_common_ports
|
|
107
|
+
print("🔍 扫描常用端口...")
|
|
108
|
+
ports = scan_common_ports()
|
|
109
|
+
if ports:
|
|
110
|
+
for p in ports:
|
|
111
|
+
print(f" ✅ {p['port']} ({p['name']}) - 开放")
|
|
112
|
+
else:
|
|
113
|
+
print(" 未发现开放端口")
|
|
114
|
+
|
|
115
|
+
elif cmd == "services":
|
|
116
|
+
from devtools_hub.scanner import get_services
|
|
117
|
+
print("📋 系统服务:")
|
|
118
|
+
services = get_services()
|
|
119
|
+
for s in services[:10]:
|
|
120
|
+
print(f" [{s['pid']}] {s['name']}")
|
|
121
|
+
|
|
122
|
+
elif cmd == "info":
|
|
123
|
+
print(f"""
|
|
124
|
+
系统信息:
|
|
125
|
+
系统: {platform.system()} {platform.release()}
|
|
126
|
+
主机: {platform.node()}
|
|
127
|
+
处理器: {platform.processor()}
|
|
128
|
+
Python: {platform.python_version()}
|
|
129
|
+
""")
|
|
130
|
+
|
|
131
|
+
elif cmd == "ip":
|
|
132
|
+
import socket
|
|
133
|
+
hostname = socket.gethostname()
|
|
134
|
+
ip = socket.gethostbyname(hostname)
|
|
135
|
+
print(f"主机: {hostname}")
|
|
136
|
+
print(f"IP: {ip}")
|
|
137
|
+
|
|
138
|
+
elif cmd == "bench":
|
|
139
|
+
if check():
|
|
140
|
+
import requests
|
|
141
|
+
r = requests.get(f"{URL}/api/benchmark/full")
|
|
142
|
+
print(json.dumps(r.json(), indent=2))
|
|
143
|
+
else:
|
|
144
|
+
print("❌ 服务未运行")
|
|
145
|
+
|
|
146
|
+
else:
|
|
147
|
+
print(f"❌ 未知命令: {cmd}")
|
|
148
|
+
|
|
149
|
+
if __name__ == "__main__":
|
|
150
|
+
main()
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
"""端口和服务扫描"""
|
|
2
|
+
import socket
|
|
3
|
+
import subprocess
|
|
4
|
+
|
|
5
|
+
def scan_port(host, port, timeout=1):
|
|
6
|
+
"""扫描单个端口"""
|
|
7
|
+
try:
|
|
8
|
+
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
|
|
9
|
+
s.settimeout(timeout)
|
|
10
|
+
result = s.connect_ex((host, port))
|
|
11
|
+
s.close()
|
|
12
|
+
return result == 0
|
|
13
|
+
except:
|
|
14
|
+
return False
|
|
15
|
+
|
|
16
|
+
def scan_common_ports(host="localhost"):
|
|
17
|
+
"""扫描常用端口"""
|
|
18
|
+
common_ports = {
|
|
19
|
+
22: "SSH",
|
|
20
|
+
80: "HTTP",
|
|
21
|
+
443: "HTTPS",
|
|
22
|
+
3000: "Node.js",
|
|
23
|
+
5000: "Flask",
|
|
24
|
+
5001: "DevTools",
|
|
25
|
+
5432: "PostgreSQL",
|
|
26
|
+
6379: "Redis",
|
|
27
|
+
8080: "Tomcat",
|
|
28
|
+
8443: "HTTPS Alt",
|
|
29
|
+
9000: "PHP-FPM",
|
|
30
|
+
27017: "MongoDB"
|
|
31
|
+
}
|
|
32
|
+
results = []
|
|
33
|
+
for port, name in common_ports.items():
|
|
34
|
+
if scan_port(host, port):
|
|
35
|
+
results.append({"port": port, "name": name, "status": "open"})
|
|
36
|
+
return results
|
|
37
|
+
|
|
38
|
+
def get_services():
|
|
39
|
+
"""获取运行中的服务"""
|
|
40
|
+
try:
|
|
41
|
+
result = subprocess.run(
|
|
42
|
+
["launchctl", "list"],
|
|
43
|
+
capture_output=True, text=True
|
|
44
|
+
)
|
|
45
|
+
services = []
|
|
46
|
+
for line in result.stdout.split("\n")[1:20]:
|
|
47
|
+
parts = line.split()
|
|
48
|
+
if len(parts) >= 3:
|
|
49
|
+
services.append({
|
|
50
|
+
"pid": parts[0],
|
|
51
|
+
"status": parts[1],
|
|
52
|
+
"name": parts[2]
|
|
53
|
+
})
|
|
54
|
+
return services
|
|
55
|
+
except:
|
|
56
|
+
return []
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
"""DevTools Hub Server"""
|
|
2
|
+
from flask import Flask, jsonify
|
|
3
|
+
import psutil
|
|
4
|
+
import platform
|
|
5
|
+
|
|
6
|
+
app = Flask(__name__)
|
|
7
|
+
|
|
8
|
+
@app.route("/api/health")
|
|
9
|
+
def health():
|
|
10
|
+
return jsonify({"status": "healthy"})
|
|
11
|
+
|
|
12
|
+
@app.route("/api/system")
|
|
13
|
+
def system():
|
|
14
|
+
return jsonify({
|
|
15
|
+
"cpu_percent": psutil.cpu_percent(),
|
|
16
|
+
"memory_percent": psutil.virtual_memory().percent,
|
|
17
|
+
"cpu_count": psutil.cpu_count()
|
|
18
|
+
})
|
|
19
|
+
|
|
20
|
+
@app.route("/api/processes/top")
|
|
21
|
+
def processes_top():
|
|
22
|
+
procs = []
|
|
23
|
+
for p in psutil.process_iter(['pid', 'name', 'cpu_percent', 'memory_percent']):
|
|
24
|
+
try:
|
|
25
|
+
procs.append(p.info)
|
|
26
|
+
except:
|
|
27
|
+
pass
|
|
28
|
+
by_cpu = sorted(procs, key=lambda x: x['cpu_percent'] or 0, reverse=True)[:10]
|
|
29
|
+
by_mem = sorted(procs, key=lambda x: x['memory_percent'] or 0, reverse=True)[:10]
|
|
30
|
+
return jsonify({"by_cpu": by_cpu, "by_memory": by_mem})
|
|
31
|
+
|
|
32
|
+
@app.route("/api/network/bandwidth")
|
|
33
|
+
def network():
|
|
34
|
+
return jsonify({"upload_mbps": 0, "download_mbps": 0})
|
|
35
|
+
|
|
36
|
+
@app.route("/api/benchmark/full")
|
|
37
|
+
def benchmark():
|
|
38
|
+
return jsonify({"cpu_score": 100, "total_score": 100})
|
|
39
|
+
|
|
40
|
+
if __name__ == "__main__":
|
|
41
|
+
app.run(port=5001)
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
|
+
Name: devtools-hub
|
|
3
|
+
Version: 2.6.0
|
|
4
|
+
Home-page: https://github.com/jingjing737/devtools-hub
|
|
5
|
+
Author: jingjing737
|
|
6
|
+
Requires-Python: >=3.7
|
|
7
|
+
Requires-Dist: flask
|
|
8
|
+
Requires-Dist: psutil
|
|
9
|
+
Requires-Dist: requests
|
|
10
|
+
Dynamic: author
|
|
11
|
+
Dynamic: home-page
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
README.md
|
|
2
|
+
pyproject.toml
|
|
3
|
+
setup.py
|
|
4
|
+
devtools_hub/__init__.py
|
|
5
|
+
devtools_hub/cli.py
|
|
6
|
+
devtools_hub/scanner.py
|
|
7
|
+
devtools_hub/server.py
|
|
8
|
+
devtools_hub.egg-info/PKG-INFO
|
|
9
|
+
devtools_hub.egg-info/SOURCES.txt
|
|
10
|
+
devtools_hub.egg-info/dependency_links.txt
|
|
11
|
+
devtools_hub.egg-info/entry_points.txt
|
|
12
|
+
devtools_hub.egg-info/requires.txt
|
|
13
|
+
devtools_hub.egg-info/top_level.txt
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
devtools_hub
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
[build-system]
|
|
2
|
+
requires = ["setuptools>=45", "wheel"]
|
|
3
|
+
build-backend = "setuptools.build_meta"
|
|
4
|
+
|
|
5
|
+
[project]
|
|
6
|
+
name = "devtools-hub"
|
|
7
|
+
version = "2.6.0"
|
|
8
|
+
dependencies = ["flask", "psutil", "requests"]
|
|
9
|
+
requires-python = ">=3.7"
|
|
10
|
+
|
|
11
|
+
[project.scripts]
|
|
12
|
+
devtools = "devtools_hub.cli:main"
|
|
13
|
+
|
|
14
|
+
[tool.setuptools.packages.find]
|
|
15
|
+
where = ["."]
|
|
16
|
+
include = ["devtools_hub*"]
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
from setuptools import setup, find_packages
|
|
2
|
+
|
|
3
|
+
setup(
|
|
4
|
+
name="devtools-hub",
|
|
5
|
+
version="2.5.0",
|
|
6
|
+
packages=find_packages(),
|
|
7
|
+
install_requires=["flask", "psutil", "requests"],
|
|
8
|
+
entry_points={
|
|
9
|
+
"console_scripts": [
|
|
10
|
+
"devtools=devtools_hub.cli:main"
|
|
11
|
+
]
|
|
12
|
+
},
|
|
13
|
+
author="jingjing737",
|
|
14
|
+
description="开发者工具集 - 系统监控、进程管理",
|
|
15
|
+
url="https://github.com/jingjing737/devtools-hub"
|
|
16
|
+
)
|