360 Secure SkillHub
360 安全技能中心

Python包鸿蒙兼容性测试技能

该 Skill 通过命令行脚本从代码托管平台或 Python 包索引下载指定包源码,扫描 Windows 专有依赖,使用 pytest 运行测试并按用例统计通过率,判定 Compatible/Partial/Incompatible 状态,输出 Markdown 与 JSON 格式的兼容性报告,附带已知不兼容包清单与排障建议。

terryking1992
terryking1992
热度 58.79
最近更新 2026-05-18 12:18:50
分类:开发依赖:代码执行 / 读写文件 / 第三方 API应用场景:调试排错 / 代码审查 / DevOps / 报告撰写

安装技能

复制下面的话术发给你的 Agent,它会通过 secure-skills 检索并安装该技能。

执行命令安装此 skill: npx secure-skills-cli add python-harmony-compatibility-checker
Metadata
name
python-harmony-compatibility-checker
description
Check Python library compatibility with HarmonyOS. Downloads source from GitHub/PyPI, detects Windows-specific dependencies, runs pytest with per-test-case reporting, and generates detailed compatibility reports.

Python HarmonyOS Compatibility Checker

When to Use

  • Check if a Python package works on HarmonyOS
  • Validate multiple packages before deployment
  • Migrate a Python project to HarmonyOS
  • Detect Windows-specific API dependencies (win32api, pythoncom, pywin32, etc.)

Usage

# Single package
python scripts/check_compatibility.py requests

# Multiple packages (parallel, 4 workers default)
python scripts/check_compatibility.py requests numpy pandas flask

# Specify workers
python scripts/check_compatibility.py --workers 8 requests numpy pandas

# From requirements file
python scripts/check_compatibility.py -r requirements.txt
python scripts/check_compatibility.py -w 8 -r requirements.txt

# Sequential mode (debugging)
python scripts/check_compatibility.py --sequential requests numpy

# Keep downloaded source for verification
python scripts/check_compatibility.py --keep-source numpy

Options

Option Description Default
-w, --workers N Number of parallel workers 4
--sequential Run checks one at a time False
-r, --requirements FILE Check packages from requirements file -
--keep-source Keep downloaded source code for verification False

Output

Reports saved to current directory:

  • compatibility_report_*.md - Markdown with summary and details
  • compatibility_report_*.json - Machine-readable with per-test-case results

Timestamps use 东八区时间 (UTC+8/北京时间).

Example (numpy)

📦 numpy v2.2.1
   Status: ✅ Compatible
   Test Pass Rate: 88.9%
   Total: 45 tests | Passed: 40 | Failed: 5

Metrics

Metric Description
Total Tests Individual test functions run
Passed Successfully completed
Failed Failed due to code issues
Environment Issues Permission/temp dir failures (not counted)
Pass Rate passed / total
Valid Pass Rate passed / (passed + failed) - excludes environment issues

Test Workflow

  1. Download Source - GitHub (preferred) or PyPI
  2. Windows Check - Scan for Windows-specific imports (win32api, pythoncom, pywin32, ctypes.windll)
    • Found → Incompatible (no further testing)
  3. Find Tests - From installed package (preferred) or source
  4. Run Tests - pytest with verbose output, per-function reporting
  5. Analyze - Categorize: environment issues vs code issues
  6. Report - Markdown + JSON with detailed results

Status

Status Criteria
✅ Compatible Installs + valid pass rate ≥ 80% + no Windows deps
⚠️ Partial Installs + valid pass rate 50-79%
❌ Incompatible Cannot install OR valid pass rate < 50% OR Windows deps detected

Error Classification

Type Description Counts Against
Environment Permission errors, temp dir issues ❌ No
Code Import errors, API incompatibilities ✅ Yes
Platform Windows/macOS/X11 dependencies ✅ Yes

Known Issues

Platform Dependencies

Platform Problematic Packages Alternative
Windows pywin32, wmi, pythoncom, xlwings Cross-platform libs
macOS applescript, quartz, cocoa -
X11 python-xlib, xcb pynput

Windows Module Detection

Scans for: win32api, win32con, win32gui, win32com, pythoncom, pywintypes, ctypes.windll, winsound, msvcrt

Detection includes:

  • Direct imports: import win32api, from win32com import ...
  • Dynamic imports: importlib.import_module('pythoncom')
  • ctypes Windows DLL: ctypes.windll, ctypes.WinDLL
  • References in setup.py, pyproject.toml

Compatible Packages

  • requests, numpy (45 tests, 88.9%), pandas, flask, django, pytest, beautifulsoup4, pillow

Scripts

check_compatibility.py

Features:

  • Source download from GitHub/PyPI
  • Windows dependency detection
  • Test discovery from installed package or source
  • pytest integration with per-test-case reporting
  • Environment issue detection
  • Source code retention (--keep-source)

pytest Integration:

  • Uses pytest -v --tb=short --import-mode=importlib
  • Runs from /tmp to avoid source import conflicts
  • Parses output for individual test function results
  • Limits to 15 test files, shows progress every 5 files

Troubleshooting

Permission Errors

# Clean up pytest temp directories
rm -rf pytest-of-*

Source Verification

# Keep source for inspection
python scripts/check_compatibility.py --keep-source xlwings

# Check Windows imports
grep -r "import win32" /path/to/source/

False Positives

Some failures may be due to:

  • Missing optional system libraries
  • Network-dependent tests
  • pytest configuration issues

Review detailed reports to distinguish real incompatibilities from environment issues.

Integration

CI/CD

- name: HarmonyOS Compatibility
  run: python scripts/check_compatibility.py -r requirements.txt --keep-source

Programmatic

from scripts.check_compatibility import check_package
result = check_package("requests")
print(f"Compatible: {result.compatible}, Issues: {result.issues}")

Limitations

  • Binary dependencies may fail to compile
  • Some packages require system-level dependencies
  • Pure HarmonyOS (NEXT) has stricter security policies
  • Not all packages have unit tests
  • Network required for source download

Related

  • references/python-env-setup.md - Python setup on HarmonyOS
  • references/compatibility-database.md - Known package status

Best Practices

For Users

  1. Review error classifications (environment vs code)
  2. Use --keep-source to verify tested code
  3. Run multiple times for transient failures
  4. Check Windows dependencies first

For Authors

  1. Include tests in your package
  2. Use pytest
  3. Avoid platform-specific tests (or use @pytest.mark.skipif)
  4. Document system dependencies
  5. Use conditional imports: if sys.platform == 'win32'