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.4.tar.gz (161.0 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.4-cp313-cp313-win_amd64.whl (344.0 kB view details)

Uploaded CPython 3.13Windows x86-64

virtualshell-1.1.4-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl (437.4 kB view details)

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

virtualshell-1.1.4-cp313-cp313-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl (395.6 kB view details)

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

virtualshell-1.1.4-cp313-cp313-macosx_11_0_universal2.whl (566.9 kB view details)

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

virtualshell-1.1.4-cp312-cp312-win_amd64.whl (344.1 kB view details)

Uploaded CPython 3.12Windows x86-64

virtualshell-1.1.4-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl (437.3 kB view details)

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

virtualshell-1.1.4-cp312-cp312-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl (395.6 kB view details)

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

virtualshell-1.1.4-cp312-cp312-macosx_11_0_universal2.whl (566.8 kB view details)

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

virtualshell-1.1.4-cp311-cp311-win_amd64.whl (343.4 kB view details)

Uploaded CPython 3.11Windows x86-64

virtualshell-1.1.4-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl (436.5 kB view details)

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

virtualshell-1.1.4-cp311-cp311-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl (395.3 kB view details)

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

virtualshell-1.1.4-cp311-cp311-macosx_11_0_universal2.whl (562.9 kB view details)

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

virtualshell-1.1.4-cp310-cp310-win_amd64.whl (342.7 kB view details)

Uploaded CPython 3.10Windows x86-64

virtualshell-1.1.4-cp310-cp310-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl (434.8 kB view details)

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

virtualshell-1.1.4-cp310-cp310-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl (393.8 kB view details)

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

virtualshell-1.1.4-cp310-cp310-macosx_11_0_universal2.whl (560.6 kB view details)

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

virtualshell-1.1.4-cp39-cp39-win_amd64.whl (351.3 kB view details)

Uploaded CPython 3.9Windows x86-64

virtualshell-1.1.4-cp39-cp39-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl (435.2 kB view details)

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

virtualshell-1.1.4-cp39-cp39-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl (394.1 kB view details)

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

virtualshell-1.1.4-cp39-cp39-macosx_11_0_universal2.whl (560.7 kB view details)

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

virtualshell-1.1.4-cp38-cp38-win_amd64.whl (342.7 kB view details)

Uploaded CPython 3.8Windows x86-64

virtualshell-1.1.4-cp38-cp38-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl (434.7 kB view details)

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

virtualshell-1.1.4-cp38-cp38-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl (393.7 kB view details)

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

virtualshell-1.1.4-cp38-cp38-macosx_11_0_universal2.whl (560.3 kB view details)

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

File details

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

File metadata

  • Download URL: virtualshell-1.1.4.tar.gz
  • Upload date:
  • Size: 161.0 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.4.tar.gz
Algorithm Hash digest
SHA256 3935390a19f0103b0a6ad5b08d2cff3e9ced47f89b537151d4dd2f9f71c1fc7b
MD5 57caf66bc400205845d65793bd2d4b73
BLAKE2b-256 dc11e2c7dee3529cf4dbe4bab6b5805f14e93729f31188d15f36726293e3fa2b

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for virtualshell-1.1.4-cp313-cp313-win_amd64.whl
Algorithm Hash digest
SHA256 580438c7c72a663563d5a562cd863a901c3ff7c6208a9951e2612467b505dc18
MD5 b002141e311e614fae5b8bbfba6bec65
BLAKE2b-256 43cecba54408f66ee16da62f9761f21347350d9b14b492228740ef64b062d40e

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for virtualshell-1.1.4-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 2831db33d260880d842efea9edb3be6742c01fa352208574df7a6945ec970834
MD5 b87ec25e814a6f0dc03bac88b1ab2821
BLAKE2b-256 81e1e18fa44de4d06a07263cfa06374969575c445ab0788cd479482ba31087e0

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for virtualshell-1.1.4-cp313-cp313-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 97bfeca46cc307ff4b3218d4d2f03ea59a3a20e47d26544db24aa822c98dcaf9
MD5 796da1bc48259a25bdbb3e820d02f30a
BLAKE2b-256 148d325864e76237d9b887607d7d31151b5bb07c3ecae8cb831824b14d5593a5

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for virtualshell-1.1.4-cp313-cp313-macosx_11_0_universal2.whl
Algorithm Hash digest
SHA256 c6535984e2b7d5e61fd2244d960ec1dd3d16ad32801667ab6932e5beff7bdd2b
MD5 ad0a28adf0660fea0e660562e3e89f26
BLAKE2b-256 4c18d6a6c0bb685e43b85038915a775d12759bf9ce538f2be916b6389e7d0ec1

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for virtualshell-1.1.4-cp312-cp312-win_amd64.whl
Algorithm Hash digest
SHA256 bf90e3d4fab57f8b41dcd488158eb7ca710deb35e783e0ac585fb389fd33e25c
MD5 960e324dcb9c15c2a50062f702270b56
BLAKE2b-256 450c9a400ff55d169a3afa3a800f53bf85567cc487e1d51c6944db92c4152fab

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for virtualshell-1.1.4-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 2060d887aa3aebc73cda17d10cd0a617db33a30acde51340d8f19025756499c3
MD5 62c490293f8899219bc5f92f73030376
BLAKE2b-256 32cd4a910b05edbf04ea929552d13f848aa994202e22fdbeb74474def29b0b14

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for virtualshell-1.1.4-cp312-cp312-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 5c60a2316835f2fd93d99399a3d700f613ebf487bb3e97e8963bdb3a7d59e89d
MD5 012e6dd907ea24104ce4d445c5f73806
BLAKE2b-256 2008fe800fd703edc054e1946e17d796719861e9f230ad1ef287a4fceb675d14

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for virtualshell-1.1.4-cp312-cp312-macosx_11_0_universal2.whl
Algorithm Hash digest
SHA256 0860a61c410211b32d6bc4857f04fa674cf45d4c5b6fb5e4bc5beb5f5e68d34b
MD5 b91f1481229340506da0d876436c5967
BLAKE2b-256 a38a880ba7885dff714a2099505de38738ffbf15188162adfbaefd27eb501ce1

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for virtualshell-1.1.4-cp311-cp311-win_amd64.whl
Algorithm Hash digest
SHA256 d446c6836cecec10d2cfc0067aa250936076a4a7208c26c5de5c370ffc3c8812
MD5 231b51e69b85734eb78b320ec4c400df
BLAKE2b-256 99a8aa4c17ffe4c80ae7768be92c5ab459976d54f2954b1e47f9590077446886

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for virtualshell-1.1.4-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 cdeae9a2b71f71f875919286f40add4f15c1491e04b4bd71d6577b698cb84bc1
MD5 7f509ca876a4a780a7b449487257420f
BLAKE2b-256 187439a67eeee6293347b0ccf6bbd6d55a5d3484d9d801f1220293f4945ec5c5

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for virtualshell-1.1.4-cp311-cp311-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 d4004931b6c69c4f57aebbb81b5279c0567bca1c93d525f5c1895b17a94570c8
MD5 2f3241cd409203ca2bede937fe2d200f
BLAKE2b-256 a7f0443fced0937ac67697037da68da58f7befca9d10970a2afb034b4d743cd4

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for virtualshell-1.1.4-cp311-cp311-macosx_11_0_universal2.whl
Algorithm Hash digest
SHA256 5665479a4ae083822f2acd862ba3081cec53462281c669de1bf345f10e4d4adb
MD5 3c0226048b950afefdffb89c00337d53
BLAKE2b-256 03bfc563071256d24a8ed94ffb85bad4e7e0b56358bb16a8ee7689a0a04db556

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for virtualshell-1.1.4-cp310-cp310-win_amd64.whl
Algorithm Hash digest
SHA256 4602e63ea6c2411525e40496a0c12f433cbde92015b92d1bd144e104815cb03b
MD5 f8ebbda4b9c80d7eb28657a14c4bc85d
BLAKE2b-256 e3a27381423145c5d9d374ce8fee6a020c0dd119e364565e8d44cd0874dcd840

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for virtualshell-1.1.4-cp310-cp310-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 74ea01e59747226e0fd93832fd7c87745e6f55518481be7ad4fa667ba32229b4
MD5 516b3db8c459619c918123e0b807ec12
BLAKE2b-256 921a35b49ffaed680b480c3fc7f16023623753828cf113fb825eff802c99bb3c

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for virtualshell-1.1.4-cp310-cp310-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 2625504858f03e943fd31d6b01f7179e64156b8177b70cd6a84b4cbcaedf20e8
MD5 fd1a4728d1e35394a2a48df082d75417
BLAKE2b-256 95274653c1275180be7f153f8c96a9e7037ed94c115a7ecd6d9c640b27898de3

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for virtualshell-1.1.4-cp310-cp310-macosx_11_0_universal2.whl
Algorithm Hash digest
SHA256 737a0668af77fac31b28005de078b9841a9c5cba1cadb8e8d59847cbeefa7f3a
MD5 e95a264516c77168ec210cf2e1969150
BLAKE2b-256 3bcc71b57dadf78a63a0610df17a877a6cda76d5d55fb653edd50321899e7553

See more details on using hashes here.

File details

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

File metadata

  • Download URL: virtualshell-1.1.4-cp39-cp39-win_amd64.whl
  • Upload date:
  • Size: 351.3 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.4-cp39-cp39-win_amd64.whl
Algorithm Hash digest
SHA256 2ad2c4eedec9285e94aa3ba258b977b5ec82572aa11dda17df6beabbb96d5af6
MD5 96d9191fc88335276241068f2dd35df4
BLAKE2b-256 38647f5ac50d8ac72615cc49ca128f25007111839a4fdc3dff09b5c1ee7bd7b5

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for virtualshell-1.1.4-cp39-cp39-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 009e2d1e3e7e2a6d1c54994d807e0a54f95da5785897fb0a5e238906ad1f48f9
MD5 da31013dd55f7c0e090032e162e995e3
BLAKE2b-256 fd41cc759f2c9152e400624427347d5cab2a93a87076c82c4d497d00c4e71c0e

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for virtualshell-1.1.4-cp39-cp39-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 32b64e92983fcd38428f36b0357f2ff276036d16baafe184ed9874a5e9b4381b
MD5 91d6c115295edc00cf4e945bef39148e
BLAKE2b-256 a61fce1fbfbd0d3e77d87799ca1777cc064f1e96a91a50a2c22d7453acd128b2

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for virtualshell-1.1.4-cp39-cp39-macosx_11_0_universal2.whl
Algorithm Hash digest
SHA256 def5ffe62efe9f2aba6f6289a15ff86ef64747c83a9aa5ba7ccff0f9352023e8
MD5 e7b2d27153af44101c9086415466b47e
BLAKE2b-256 b08de2cfd8d29dd7ff7365dd1951ab32e2f2bc9aa8718fe3b95c7e7829150615

See more details on using hashes here.

File details

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

File metadata

  • Download URL: virtualshell-1.1.4-cp38-cp38-win_amd64.whl
  • Upload date:
  • Size: 342.7 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.4-cp38-cp38-win_amd64.whl
Algorithm Hash digest
SHA256 8a5165dba7bc170174fe74bdc84bc5ba8737ed42441eca067ef021252d6afeff
MD5 9dbe53e00bac8c10b3cc915644fb00db
BLAKE2b-256 0143cb770413fb90084f538351dad2ac79d3d01a8ed84e6b224d8a3f9448f87e

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for virtualshell-1.1.4-cp38-cp38-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 8f9cf07cfb744ef64b3ef69ef6ae6a6212c76f3990b7a2cf561bfb78649cc2c5
MD5 d641b1ad24c42a5e8a270d4d768ba705
BLAKE2b-256 7533d5172f34cd14f5b0e67ae24f3ed3130c82908ccb35221c9a76ca0242ac35

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for virtualshell-1.1.4-cp38-cp38-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 ddcdfffd2e8cb5d54fcd285ad0eb964955d6f23ff562b2013482ff795f3940ef
MD5 73d5088b0f4ab6d74c02b05d73abd940
BLAKE2b-256 679924222b4b051dfa3b9d189c60a4fbce09cf7f2a063c30e3806b8ee4455f9a

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for virtualshell-1.1.4-cp38-cp38-macosx_11_0_universal2.whl
Algorithm Hash digest
SHA256 d88e01d9c627b9d6be9cf1027e5e4f1b3009562492354e4f631be5b81aadb51d
MD5 61877aba5e1b2f41428070baefce19de
BLAKE2b-256 8d9e6fdb2649a13e325e91195ea06e29475535ab8048778b477d44c618419c82

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