Skip to main content

High-performance PowerShell bridge (C++ pybind11 backend)

Project description

virtualshell

High-performance PowerShell automation for Python. virtualshell keeps a single PowerShell host warm and exposes it through a thin Python wrapper backed by a C++ engine. The result: millisecond-scale latency, async execution, and session persistence without juggling subprocesses.

Full documentation now lives in the project wiki. This README gives you the essentials and quick links.


Why virtualshell?

  • Persistent session – reuse modules, $env:*, and functions between calls.
  • Low latency – avoid the 200+ ms penalty of subprocess.run("pwsh"); most commands settle in ~2-4 ms.
  • Async + batching – schedule commands concurrently or in batches with strong timeout control.
  • Structured results – every invocation returns stdout/stderr, exit code, success flag, and timing.
  • Predictable failures – typed Python exceptions for “pwsh missing”, timeouts, and execution errors.
  • Type-safe automation – generate Python Protocols from PowerShell objects and create live proxies with full type hints.

Typical users embed PowerShell inside Python orchestration, long-running agents, or test suites that need reliability and speed.

Installation

pip install virtualshell

Pre-built wheels are published for Windows, Linux (x86_64/aarch64), and macOS universal2. PowerShell (pwsh or powershell.exe) must be discoverable on PATH unless you pass an explicit path.


Quick start

from virtualshell import Shell

with Shell(timeout_seconds=5) as sh:
    result = sh.run("Write-Output 'Hello from pwsh'")
    print(result.out.strip())

    sh.run("function Inc { $global:i++; $global:i }")
    print(sh.run("Inc").out.strip())  # 1
    print(sh.run("Inc").out.strip())  # 2

Async execution

from virtualshell import Shell
import asyncio

async def main():
    shell = Shell().start()
    fut = shell.run_async("Get-Date")
    res = await asyncio.wrap_future(fut)
    print(res.out.strip())
    shell.stop()

asyncio.run(main())

Scripts and arguments

from pathlib import Path
from virtualshell import Shell

shell = Shell().start()

# Positional arguments
shell.script(Path("./scripts/test.ps1"), args=["alpha", "42"])

# Named arguments (hashtable splatting)
shell.script(
    Path("./scripts/test.ps1"),
    args={"Name": "Alice", "Count": "3"},
)

shell.stop()

Every API surface (sync/async/script) accepts timeout overrides and optional error raising via raise_on_error or callbacks.


Zero-Copy Bridge (Windows only)

For high-throughput data transfer between Python and PowerShell, the Zero-Copy Bridge uses shared memory to eliminate serialization overhead. Ideal for large binary data, files, or high-frequency transfers.

from virtualshell import Shell, ZeroCopyBridge, PSObject

with Shell(timeout_seconds=60) as shell:
    with ZeroCopyBridge(shell) as bridge:
        # Python → PowerShell
        data = b"Large binary data" * 100000
        bridge.send(data, "$myData", timeout=30.0)
        res = shell.run("$myData.Length")
        print(f"PowerShell received {res.out.strip()} bytes")
    
        # PowerShell → Python
        shell.run("$response = [byte[]]::new(1048576)")
        data = bridge.receive("$response", timeout=30.0)
        print(f"Python received {len(data)} bytes")

For more complex scenarios involving PowerShell objects, you can serialize/deserialize them using the built-in methods:

with Shell(timeout_seconds=60) as shell:
    # Get processes from PowerShell
    shell.run("$processes = Get-Process | Select-Object -First 5 -Property Name, Id, WorkingSet64")

    with ZeroCopyBridge(shell) as bridge:
        # Send the process list to Python
        bridge.serialize("processes", out_var="bytes")
        ps_bytes_raw: bytes = bridge.receive("bytes")

        # Convert bytes to PSObject in Python
        ps_obj = PSObject.from_bytes(ps_bytes_raw)

        # Print each process info
        for process in ps_obj["Items"]:
            print(f"Process Name: {process['Name']}, ID: {process['Id']}, Memory: {process['WorkingSet64']} bytes")

        # Modify the process names in Python
        for process in ps_obj["Items"]:
            process["Name"] = f"Modified_{process['Name']}"
        
        # Send modified object back to PowerShell
        bridge.send(ps_obj.to_bytes(), "processes")
        bridge.deserialize("processes")
        
        # Verify changes in PowerShell
        res = shell.run("$processes | Where-Object { $_.Name -like 'Modified_*' }")
        print("\nModified Processes in PowerShell:")
        print(res.out)

Performance: 5-150 MB/s depending on data size. Requires win_pwsh.dll (Windows only).

See Zero-Copy Bridge guide for complete documentation.


PowerShell object proxies

Shell.generate_psobject reflects a PowerShell object into a Python Protocol, while Shell.make_proxy creates a live proxy that forwards attribute access back into PowerShell. Together they give you IDE-friendly, type-hinted automation. This is still an experimental feature and may not cover all edge cases.

from virtualshell import Shell
from StreamWriter import StreamWriter  # generated via Shell().generate_psobject
from StreamReader import StreamReader

with Shell(strip_results=True, timeout_seconds=60) as sh:
    proxy_writer: StreamWriter = sh.make_proxy("StreamWriterProxy", "System.IO.StreamWriter('test.txt')") # type-hinted proxy (StreamWriter made via generate_psobject)

    proxy_writer.WriteLine("Test Line 1!")
    proxy_writer.WriteLine("Test Line 2!")
    proxy_writer.WriteLine("Test Line 3!")
    proxy_writer.Flush()
    proxy_writer.Close()

    proxy_reader: StreamReader = sh.make_proxy("StreamReaderProxy", "System.IO.StreamReader('test.txt')")

    while not proxy_reader.EndOfStream:
        print(f"Read: {proxy_reader.ReadLine()}")

Detailed guides live in the wiki: generate_psobject and make_proxy.


Core API overview

Method Purpose
Shell.run(cmd, *, timeout=None, raise_on_error=False) Execute a single command synchronously.
Shell.run_async(cmd, *, callback=None, timeout=None) Schedule a command; returns a concurrent.futures.Future.
Shell.script(path, args=None, *, timeout=None, dot_source=False, raise_on_error=False) Execute .ps1 files with positional or named arguments.
Shell.script_async(...) Async counterpart of script.
Shell.save_session() Persist the current session to an XML snapshot.
Shell.pwsh(text) Safely echo a literal PowerShell string (auto quoting).
Shell.make_proxy(type_name, object_expression, *, depth=4) Create a live PowerShell object proxy.
Shell.generate_psobject(type_expression, output_path) Generate a Python Protocol for a PowerShell object type.

More helpers live in the wiki, including session restore, batching, and diagnostic tips.


Configuration

from virtualshell import Shell

shell = Shell(
    powershell_path="C:/Program Files/PowerShell/7/pwsh.exe",
    working_directory="C:/automation",
    environment={"MY_FLAG": "1"},
    timeout_seconds=10,
    auto_restart_on_timeout=True,
    stdin_buffer_size=64 * 1024,
    initial_commands=[
        "$ErrorActionPreference = 'Stop'",
        "$ProgressPreference = 'SilentlyContinue'",
    ],
    set_UTF8=True,
    strip_results=False,
)

shell.start()

Configuration is applied before the process starts. You can inspect later with shell._core.get_config().


Performance

Up-to-date benchmark artefacts (bench.json, bench.csv) and analysis live in wiki/Project/Benchmarks.md. Headline numbers from the latest run (Windows 11, Python 3.13):

  • Sequential commands: ~3.5 ms average
  • Batch commands: ~3.2 ms per command
  • Async latency: ~1.9–2.4 ms with 50 outstanding tasks
  • Session save: ~0.30 s median

See the wiki for charts and methodology.


Building from source

Dependencies:

  • Python 3.8+
  • CMake 3.20+
  • A C++17 compiler (MSVC, Clang, or GCC)
  • scikit-build-core, pybind11
python -m pip install -U build
python -m build
python -m pip install dist/virtualshell-*.whl

Learn more

Bug reports and feature requests are welcome via issues or discussions.


Licensed under the Apache 2.0 license. See LICENSE.

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

virtualshell-1.1.5.tar.gz (161.8 kB view details)

Uploaded Source

Built Distributions

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

virtualshell-1.1.5-cp313-cp313-win_amd64.whl (344.8 kB view details)

Uploaded CPython 3.13Windows x86-64

virtualshell-1.1.5-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl (438.2 kB view details)

Uploaded CPython 3.13manylinux: glibc 2.27+ x86-64manylinux: glibc 2.28+ x86-64

virtualshell-1.1.5-cp313-cp313-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl (396.4 kB view details)

Uploaded CPython 3.13manylinux: glibc 2.26+ ARM64manylinux: glibc 2.28+ ARM64

virtualshell-1.1.5-cp313-cp313-macosx_11_0_universal2.whl (567.7 kB view details)

Uploaded CPython 3.13macOS 11.0+ universal2 (ARM64, x86-64)

virtualshell-1.1.5-cp312-cp312-win_amd64.whl (344.9 kB view details)

Uploaded CPython 3.12Windows x86-64

virtualshell-1.1.5-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl (438.1 kB view details)

Uploaded CPython 3.12manylinux: glibc 2.27+ x86-64manylinux: glibc 2.28+ x86-64

virtualshell-1.1.5-cp312-cp312-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl (396.4 kB view details)

Uploaded CPython 3.12manylinux: glibc 2.26+ ARM64manylinux: glibc 2.28+ ARM64

virtualshell-1.1.5-cp312-cp312-macosx_11_0_universal2.whl (567.6 kB view details)

Uploaded CPython 3.12macOS 11.0+ universal2 (ARM64, x86-64)

virtualshell-1.1.5-cp311-cp311-win_amd64.whl (344.3 kB view details)

Uploaded CPython 3.11Windows x86-64

virtualshell-1.1.5-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl (437.3 kB view details)

Uploaded CPython 3.11manylinux: glibc 2.27+ x86-64manylinux: glibc 2.28+ x86-64

virtualshell-1.1.5-cp311-cp311-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl (396.1 kB view details)

Uploaded CPython 3.11manylinux: glibc 2.26+ ARM64manylinux: glibc 2.28+ ARM64

virtualshell-1.1.5-cp311-cp311-macosx_11_0_universal2.whl (563.7 kB view details)

Uploaded CPython 3.11macOS 11.0+ universal2 (ARM64, x86-64)

virtualshell-1.1.5-cp310-cp310-win_amd64.whl (343.5 kB view details)

Uploaded CPython 3.10Windows x86-64

virtualshell-1.1.5-cp310-cp310-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl (435.6 kB view details)

Uploaded CPython 3.10manylinux: glibc 2.27+ x86-64manylinux: glibc 2.28+ x86-64

virtualshell-1.1.5-cp310-cp310-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl (394.6 kB view details)

Uploaded CPython 3.10manylinux: glibc 2.26+ ARM64manylinux: glibc 2.28+ ARM64

virtualshell-1.1.5-cp310-cp310-macosx_11_0_universal2.whl (561.4 kB view details)

Uploaded CPython 3.10macOS 11.0+ universal2 (ARM64, x86-64)

virtualshell-1.1.5-cp39-cp39-win_amd64.whl (352.1 kB view details)

Uploaded CPython 3.9Windows x86-64

virtualshell-1.1.5-cp39-cp39-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl (436.0 kB view details)

Uploaded CPython 3.9manylinux: glibc 2.27+ x86-64manylinux: glibc 2.28+ x86-64

virtualshell-1.1.5-cp39-cp39-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl (394.9 kB view details)

Uploaded CPython 3.9manylinux: glibc 2.26+ ARM64manylinux: glibc 2.28+ ARM64

virtualshell-1.1.5-cp39-cp39-macosx_11_0_universal2.whl (561.5 kB view details)

Uploaded CPython 3.9macOS 11.0+ universal2 (ARM64, x86-64)

virtualshell-1.1.5-cp38-cp38-win_amd64.whl (343.5 kB view details)

Uploaded CPython 3.8Windows x86-64

virtualshell-1.1.5-cp38-cp38-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl (435.5 kB view details)

Uploaded CPython 3.8manylinux: glibc 2.27+ x86-64manylinux: glibc 2.28+ x86-64

virtualshell-1.1.5-cp38-cp38-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl (394.5 kB view details)

Uploaded CPython 3.8manylinux: glibc 2.26+ ARM64manylinux: glibc 2.28+ ARM64

virtualshell-1.1.5-cp38-cp38-macosx_11_0_universal2.whl (561.1 kB view details)

Uploaded CPython 3.8macOS 11.0+ universal2 (ARM64, x86-64)

File details

Details for the file virtualshell-1.1.5.tar.gz.

File metadata

  • Download URL: virtualshell-1.1.5.tar.gz
  • Upload date:
  • Size: 161.8 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for virtualshell-1.1.5.tar.gz
Algorithm Hash digest
SHA256 1fbe5d00a6f756583e6b180249fda3c08e6a9bc19bfcda63361f20397a937f9a
MD5 d2efaec0e4ee7a28add07a6a036d2573
BLAKE2b-256 bd26eaf1ee71fd1d55c2d78b1ba89cc1365b3cff3c07dc3ee6867b06f12da476

See more details on using hashes here.

File details

Details for the file virtualshell-1.1.5-cp313-cp313-win_amd64.whl.

File metadata

File hashes

Hashes for virtualshell-1.1.5-cp313-cp313-win_amd64.whl
Algorithm Hash digest
SHA256 6512ca76f0e74fdad8392ea7dc9650f1e177fd46a551bd01a49c0e13e580bb78
MD5 341404b740a4ee6d5e775c524fbc9890
BLAKE2b-256 e212ffdfef2aa407f8758ff75e89d90ab22bc770277e442e9ad2e51c2fcd8d22

See more details on using hashes here.

File details

Details for the file virtualshell-1.1.5-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for virtualshell-1.1.5-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 117a1d748592be5dff3804028528c54916db2079d2cfc0e213d97029be9370e0
MD5 e27359d0394d11ae8fe4e7f0960782ab
BLAKE2b-256 920d1a2f9d19b95a9eb73424673a1383cb34111d7b4d0c7bffb518ab9ed08911

See more details on using hashes here.

File details

Details for the file virtualshell-1.1.5-cp313-cp313-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl.

File metadata

File hashes

Hashes for virtualshell-1.1.5-cp313-cp313-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 371c2e4345ca1cee980d84be2b2bcba34cde141b653218ae97808e19003d822b
MD5 3d4446e0e5cdbfd219b5e26f9ae74c9b
BLAKE2b-256 bd6238a394e914d407ee92ef5314a55e77b6d6079d4e6be47514117657023932

See more details on using hashes here.

File details

Details for the file virtualshell-1.1.5-cp313-cp313-macosx_11_0_universal2.whl.

File metadata

File hashes

Hashes for virtualshell-1.1.5-cp313-cp313-macosx_11_0_universal2.whl
Algorithm Hash digest
SHA256 9347952542a2862266b394cb4f8cb9e1904d0aae352e909acb98c93a274d2ddc
MD5 152c3521730311daac0e814ba237865b
BLAKE2b-256 e004eb8cc350d283a852362edaf85fbf7b50f11bc5e0af1a78ccd6956ef25b66

See more details on using hashes here.

File details

Details for the file virtualshell-1.1.5-cp312-cp312-win_amd64.whl.

File metadata

File hashes

Hashes for virtualshell-1.1.5-cp312-cp312-win_amd64.whl
Algorithm Hash digest
SHA256 099add4e1f80e85e638a2c7f450c0f4c4e79cc053190e0010a1ffc5a7d6a2751
MD5 4cb233f9b736d391fa25181835af960f
BLAKE2b-256 78ba5690c73dc143f6d3e7fda333280b95961507d7549bb37426181dcda38203

See more details on using hashes here.

File details

Details for the file virtualshell-1.1.5-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for virtualshell-1.1.5-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 245d26d8bb15b49e3b8b6b63b4abd5f3c127ab0f10c3c727fa80d9bd4dd2dfcd
MD5 ad0b4348e745c3c29cfb44b4532d1cca
BLAKE2b-256 d8a15d0d2dc839d3237fb5d9359e2ab5f59b95609c2bbfed6dcb0009288c93b4

See more details on using hashes here.

File details

Details for the file virtualshell-1.1.5-cp312-cp312-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl.

File metadata

File hashes

Hashes for virtualshell-1.1.5-cp312-cp312-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 30f859978474cf4ad369297d42739cfb7b2c0e277b04d736e86346dc2b1bf382
MD5 07286d60fdd6c0517923c09301428003
BLAKE2b-256 cd4142bd94c27de239a58c742b073ce60ea586bf40c54f81ad90481c5259d2ba

See more details on using hashes here.

File details

Details for the file virtualshell-1.1.5-cp312-cp312-macosx_11_0_universal2.whl.

File metadata

File hashes

Hashes for virtualshell-1.1.5-cp312-cp312-macosx_11_0_universal2.whl
Algorithm Hash digest
SHA256 e831d843e10e49021cb8155c202e71799ffb23a4c40d2425813fdb0f5438dbf2
MD5 ecf940b12fcf946eb8b526c75c265e2b
BLAKE2b-256 d2a7626daf7ae465d8fbab6c05fa447931eb42b1e725e3c3ae9cff856d0a0708

See more details on using hashes here.

File details

Details for the file virtualshell-1.1.5-cp311-cp311-win_amd64.whl.

File metadata

File hashes

Hashes for virtualshell-1.1.5-cp311-cp311-win_amd64.whl
Algorithm Hash digest
SHA256 1fcd24a8e5c0799c43802b09c294fc26155dd673cae7fa6f93ffd7dd4517800f
MD5 801ea21665e7c0b40c6e12f911a96322
BLAKE2b-256 3d4f77048f48a8e5901682dc40aa0e946efaa69bd9d24ee1e4d6bba27cb16d42

See more details on using hashes here.

File details

Details for the file virtualshell-1.1.5-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for virtualshell-1.1.5-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 5a3800bd2d506bfffa1b4e901905903cd8198a69a5a6b0afb27b61a186268fa7
MD5 f9ff9eecbe20f9fe75ee0214a775c5aa
BLAKE2b-256 fce297c49d66d7596de47e8d3a3f83194808ae7d4cad04b59d5826c81cb074b9

See more details on using hashes here.

File details

Details for the file virtualshell-1.1.5-cp311-cp311-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl.

File metadata

File hashes

Hashes for virtualshell-1.1.5-cp311-cp311-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 bd03e722a2e20c1bb6691e455ab05e026045be53849c6b7de7659d1dba1bedd3
MD5 74b84c8df92fcf33d9d9e9e5b1810a28
BLAKE2b-256 65865158adf11a5e2acddfea84a0361e8887875de66f52409c0460c3393ba951

See more details on using hashes here.

File details

Details for the file virtualshell-1.1.5-cp311-cp311-macosx_11_0_universal2.whl.

File metadata

File hashes

Hashes for virtualshell-1.1.5-cp311-cp311-macosx_11_0_universal2.whl
Algorithm Hash digest
SHA256 5c1f86a33263229e2cab7ee81e07873f8f469ee5ad4b91c681e86a4be1b84088
MD5 0e447a361164faa1acb6b37a9b666555
BLAKE2b-256 afd1cecdffabb7dca7692b1353bb8b99e8d6f631902a6c82cf3fdba9a584c9d2

See more details on using hashes here.

File details

Details for the file virtualshell-1.1.5-cp310-cp310-win_amd64.whl.

File metadata

File hashes

Hashes for virtualshell-1.1.5-cp310-cp310-win_amd64.whl
Algorithm Hash digest
SHA256 3502b1369b533de3aa94d5101bc08c242c971cb6a8f0b7dcd08e5cf6b93c7b76
MD5 2c9bc4913359d1ff18aab83e880fcf8b
BLAKE2b-256 0e1a1653ae0720d287598f002670ae103a024dc9caec4cb72837f41df04c902f

See more details on using hashes here.

File details

Details for the file virtualshell-1.1.5-cp310-cp310-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for virtualshell-1.1.5-cp310-cp310-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 ea21be0b6bfb3eda2b80723ee02815744a94eb1f2bd713ccadefea8bea1663b6
MD5 8e418b647e4742c0234f74b1aff6478d
BLAKE2b-256 c1df0405b1c49bbe9de524e054c98d3100325950a2e52c0cf33e053853b7dec1

See more details on using hashes here.

File details

Details for the file virtualshell-1.1.5-cp310-cp310-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl.

File metadata

File hashes

Hashes for virtualshell-1.1.5-cp310-cp310-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 34fe0a37561e3573b25519bebddd675a0133fe340a5b159498917d750ea44e3f
MD5 7f94d2851c60d1af21f51633c9ae1937
BLAKE2b-256 b0c5b0f06fdab35306385703d0a8b4d087fb6146d2e7f02aeaa9b4fae174940b

See more details on using hashes here.

File details

Details for the file virtualshell-1.1.5-cp310-cp310-macosx_11_0_universal2.whl.

File metadata

File hashes

Hashes for virtualshell-1.1.5-cp310-cp310-macosx_11_0_universal2.whl
Algorithm Hash digest
SHA256 82e6410c3300fe6e86ddda51b3371fb2d9583695081890692a87fa3ab903ad03
MD5 2f59b1fab750be0ed9a8cc5507312bf6
BLAKE2b-256 e832d8ddb065b1384f581d706892d21588cb19b54340b3e5bd37fdf9df522d8b

See more details on using hashes here.

File details

Details for the file virtualshell-1.1.5-cp39-cp39-win_amd64.whl.

File metadata

  • Download URL: virtualshell-1.1.5-cp39-cp39-win_amd64.whl
  • Upload date:
  • Size: 352.1 kB
  • Tags: CPython 3.9, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for virtualshell-1.1.5-cp39-cp39-win_amd64.whl
Algorithm Hash digest
SHA256 69599067e175de306e70c583a80b920d368a6f7f5d1b8bdfcaaf096f30fd71e1
MD5 d96a4252980306d9741800833e7c26f9
BLAKE2b-256 9f33c90c2658f61cb2731b00869fb6c12e6df124d2a79dad2a55d4040221fd37

See more details on using hashes here.

File details

Details for the file virtualshell-1.1.5-cp39-cp39-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for virtualshell-1.1.5-cp39-cp39-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 a166876edfad8bedca9d99fe514b3602c61017e2e0e4ed4217eadd1e39f21b3e
MD5 6ebca9723c22ea34cc34153e5f6b9a83
BLAKE2b-256 84acfbaf1d1c8cb4fce25b4a3d71e5653316b8694a2aca41c152cf3505ff07d4

See more details on using hashes here.

File details

Details for the file virtualshell-1.1.5-cp39-cp39-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl.

File metadata

File hashes

Hashes for virtualshell-1.1.5-cp39-cp39-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 c802f15be45eee3baedff5d873e4f1c0e32f756a4d28bfc12938aa81a07cabaf
MD5 0ee25b568ca38f807960ff4bbaa8f25b
BLAKE2b-256 4491308a79b144d1021e401aef5deb9f780e9cf38530040ba31067d851cec0ad

See more details on using hashes here.

File details

Details for the file virtualshell-1.1.5-cp39-cp39-macosx_11_0_universal2.whl.

File metadata

File hashes

Hashes for virtualshell-1.1.5-cp39-cp39-macosx_11_0_universal2.whl
Algorithm Hash digest
SHA256 a135826f797fc04da0065a8ec6fee13d0cc7e3e17a8c068e37115532aec93e19
MD5 801f31ab1e023e1245d970d239c3eea8
BLAKE2b-256 c0d1ba30a37e385b4241c961f8023eac26d33730161a440af50b5d8a76810dda

See more details on using hashes here.

File details

Details for the file virtualshell-1.1.5-cp38-cp38-win_amd64.whl.

File metadata

  • Download URL: virtualshell-1.1.5-cp38-cp38-win_amd64.whl
  • Upload date:
  • Size: 343.5 kB
  • Tags: CPython 3.8, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for virtualshell-1.1.5-cp38-cp38-win_amd64.whl
Algorithm Hash digest
SHA256 24453e877ecb8e4016edd8802e1d300913e83401ca21a718d4eabe812b929a61
MD5 1d3952b25d77a646350aaec94ac438d6
BLAKE2b-256 8eaceea2f33b256863d4ca407ace746b2a344fe088d6ea250279376dfc80fb16

See more details on using hashes here.

File details

Details for the file virtualshell-1.1.5-cp38-cp38-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for virtualshell-1.1.5-cp38-cp38-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 5603ed5a4e3ebe58bec9f22e69c15bdb998bead48888d64560bfda283eda17f1
MD5 079919dddd23f8af36feec3e6fa6b689
BLAKE2b-256 d35623c9e393089f51b3fd8650a93c13e65ab72e915e288b5fea74d62347caad

See more details on using hashes here.

File details

Details for the file virtualshell-1.1.5-cp38-cp38-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl.

File metadata

File hashes

Hashes for virtualshell-1.1.5-cp38-cp38-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 18d104f1a23c519d157765d95bce89508b3b6765a3a64742442866880ddcfbcc
MD5 3670b20bde9f4758775c4159b476d079
BLAKE2b-256 3e060a909292484a649f6e2d93571c75fe2f35a4529a0fd1a292021caa2beb16

See more details on using hashes here.

File details

Details for the file virtualshell-1.1.5-cp38-cp38-macosx_11_0_universal2.whl.

File metadata

File hashes

Hashes for virtualshell-1.1.5-cp38-cp38-macosx_11_0_universal2.whl
Algorithm Hash digest
SHA256 2201e661f46bbaa3e7953c1b778f0bfb97d0270d593f55b671fbde7c5ac71cbb
MD5 64096c198711fe3df247f0e42825ef64
BLAKE2b-256 335e3e7b75a88342c1d49ce3242497220aef8cd9cc82a25c5cb97dab9f6acd34

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