Skip to main content

A powerful, high-level Python wrapper for managing and testing V2Ray/Xray-core and Hysteria clients.

Project description

python-v2ray

PyPI Version License: GPL v3 Python Versions Documentation

A powerful, high-level Python wrapper for managing and testing V2Ray/Xray-core and Hysteria clients.

This library abstracts the complexities of binary management, multi-format config parsing, and concurrent connection testing, providing a clean and streamlined API for developers.

For full installation guides, core concepts, and the complete API reference, please visit our full documentation site.


✨ Features

  • Automated Binary Management: Automatically downloads and manages the necessary Xray-core, Hysteria, and test engine binaries for your platform (Windows, macOS, Linux).
  • Unified Config Parser: Seamlessly parses various subscription link formats (vless, vmess, trojan, ss, hysteria2, mvless) into a standardized Python object model.
  • High-Speed Concurrent Testing: Utilizes a hybrid architecture (Python + Go) to test dozens of configurations simultaneously, reporting latency and connection status in seconds.
  • Dynamic Config Builder: A fluent builder API to programmatically construct complex Xray JSON configurations with custom inbounds, outbounds, and routing rules.
  • Live Statistics: Connect to a running Xray-core instance's gRPC API to fetch live traffic statistics (uplink & downlink).
  • Cross-Platform: Designed to work flawlessly across Windows, macOS, and Linux environments.

🚀 Installation

Install the latest stable version from PyPI:

pip install python-v2ray

⚡️ Quick Start: Test a List of Proxies

This example demonstrates the core functionality: downloading dependencies, parsing URIs, and running a connection test. For more advanced examples, please see our full documentation.

from pathlib import Path
from python_v2ray.downloader import BinaryDownloader
from python_v2ray.tester import ConnectionTester
from python_v2ray.config_parser import parse_uri

def run_tests():
    """
    An example of ensuring binaries, parsing URIs, and testing their connectivity.
    """
    project_root = Path("./") # Assumes running from the project's root directory

    # --- 1. Ensure all required binaries are available ---
    print("--- Verifying binaries ---")
    try:
        downloader = BinaryDownloader(project_root)
        downloader.ensure_all()
    except Exception as e:
        print(f"Fatal Error: {e}")
        return

    # --- 2. Define your list of proxy URIs ---
    test_uris = [
        "vless://...",
        "vmess://...",
        "hysteria2://...",
        # ... add more of your configs here
    ]

    # --- 3. Parse all URIs into a unified format ---
    print("\n* Parsing URIs...")
    parsed_configs = [p for p in (parse_uri(uri) for uri in test_uris) if p]
    if not parsed_configs:
        print("No valid configurations found to test.")
        return

    print(f"* Preparing to test {len(parsed_configs)} configurations concurrently...")

    # --- 4. Initialize and run the tester ---
    tester = ConnectionTester(
        vendor_path=str(project_root / "vendor"),
        core_engine_path=str(project_root / "core_engine")
    )
    results = tester.test_uris(parsed_configs)

    # --- 5. Display the results, sorted by latency ---
    print("\n" + "="*20 + " Test Results " + "="*20)
    if results:
        sorted_results = sorted(results, key=lambda x: x.get('ping_ms', 9999))
        for result in sorted_results:
            tag = result.get('tag', 'N/A')
            ping = result.get('ping_ms', -1)
            status = result.get('status', 'error')
            
            if status == 'success':
                print(f"✅ Tag: {tag:<35} | Latency: {ping:>4} ms | Status: {status}")
            else:
                print(f"❌ Tag: {tag:<35} | Latency: {ping:>4} ms | Status: {status.split('|').strip()}")
    else:
        print("No results were received from the tester.")
    print("="*56)

if __name__ == "__main__":
    run_tests()

🙏 Acknowledgments

This project would not be possible without the incredible work of the teams behind the core technologies it relies on. Special thanks to:

🤝 Contributing

Contributions are welcome! Please see our contribution guidelines for more details.

📜 License

Distributed under the GNU General Public License v3.0. See LICENSE for more information.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

python_v2ray-0.1.3.tar.gz (33.9 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

python_v2ray-0.1.3-py3-none-any.whl (35.2 kB view details)

Uploaded Python 3

File details

Details for the file python_v2ray-0.1.3.tar.gz.

File metadata

  • Download URL: python_v2ray-0.1.3.tar.gz
  • Upload date:
  • Size: 33.9 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.12.0

File hashes

Hashes for python_v2ray-0.1.3.tar.gz
Algorithm Hash digest
SHA256 a55ed981cb8c20cc81f3d8372291163789d4fc3a4d8628d14762c9118f4e4031
MD5 829e88c7742c4e973fd2d9212a7310a7
BLAKE2b-256 4c182ec7f9effc5ef47adb7ba7e7171e15cbcdb36c2796b67cd361fa42daf5dd

See more details on using hashes here.

File details

Details for the file python_v2ray-0.1.3-py3-none-any.whl.

File metadata

  • Download URL: python_v2ray-0.1.3-py3-none-any.whl
  • Upload date:
  • Size: 35.2 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.12.0

File hashes

Hashes for python_v2ray-0.1.3-py3-none-any.whl
Algorithm Hash digest
SHA256 33f71f567d2e3424df998369ecce293ee82a228f0b2d76b674bfcbe9d124e263
MD5 e0dd9fe612f950a63ce3ef66131ba7bc
BLAKE2b-256 e60830528b2c151442fd9448adbc6de8ed879bb077ecaef30958b728ece5e038

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page