This release is a pre-release and may not be stable for production use.
Service Manager
A cross-platform library for installing and managing services on Windows, macOS, and Linux.
Overview
The Service Manager library provides a unified interface for managing system services across different operating systems. It follows standard service management conventions, allowing you to:
- Install/uninstall services
- Enable/disable services at boot time
- Start/stop running services
- Query service status
It creates user-level services (not system-wide root services), which means:
- Linux: User systemd services (
systemctl --user) - macOS: LaunchAgents (
~/Library/LaunchAgents) - Windows: Scheduled Tasks (running on user login)
Installation
pip install etiket-service-manager
Pre-configured Services
This library includes pre-configured service definitions for the QHarbor application suite. These helper functions automatically set up the correct paths, executable locations, and naming conventions for QHarbor's sync components.
from etiket_service_manager.services import sync_agent, sync_api
from packaging.version import Version
# Get the manager for the Sync Agent
agent_manager = sync_agent.get_service()
agent_manager.status # Check status
# Install — no need to pass program_arguments, the config carries them
agent_manager.install(version=Version("1.0.0"))
# Get the manager for the Sync API
api_manager = sync_api.get_service()
api_manager.install(version=Version("1.0.0"))
The pre-configured services resolve their executable via default_runner_install_location(), which knows the canonical location of the runner on each OS:
| Platform | Data directory (app_dir) |
Runner executable |
|---|---|---|
| macOS | ~/Library/Application Support/quantum_machines/services |
~/Applications/quantum_machines/eTiKeT Service.app/Contents/MacOS/etiket_service_runner |
| Linux | ~/.local/share/quantum_machines/services (or $XDG_DATA_HOME/quantum_machines/services) |
<app_dir>/etiket_service_runner |
| Windows | %LOCALAPPDATA%\quantum_machines\services |
<app_dir>\etiket_service_runner.exe |
On macOS the runner ships as a code-signed .app bundle so it's identifiable to Gatekeeper, TCC, and System Settings (Privacy & Security → Full Disk Access). On Linux and Windows the bare binary lives in the per-user data directory.
Actions and Behaviors
The following table describes each action, its expected behavior, possible errors, and resulting service states:
| Action | Description | Possible Errors | Expected Status After Action |
|---|---|---|---|
| install | Installs, enables, and starts the service | ServiceAlreadyInstalled, ServiceOperationError |
installed=True, enabled=True, running=True |
| enable | Enables the service to start automatically at boot | ServiceAlreadyEnabled, ServiceOperationError |
installed=True, enabled=True, running=unchanged |
| start | Starts the service | ServiceAlreadyStarted, ServiceOperationError |
installed=True, enabled=unchanged, running=True |
| stop | Stops the service | ServiceAlreadyStopped, ServiceOperationError |
installed=True, enabled=unchanged, running=False |
| disable | Disables the service (prevents starting at boot) | ServiceAlreadyDisabled, ServiceOperationError |
installed=True, enabled=False, running=False |
| uninstall | Uninstalls the service | ServiceAlreadyUnInstalled, ServiceOperationError |
installed=False, enabled=False, running=False |
Configuring the Service Manager
To use the Service Manager for your own applications, you need to create a ServiceConfig object. exe_install_location is required and uses a PlatformPath so the same config works across OSes — the entry matching the running OS is selected at install time.
from pathlib import Path
from etiket_service_manager import PlatformPath, ServiceConfig, ServiceManager
config = ServiceConfig(
service_name="my_service",
app_dir=Path.home() / ".my_service", # Runtime data: logs, state
exe_install_location=PlatformPath(
darwin=Path("/Applications/MyService.app/Contents/MacOS/my_service"),
linux=Path.home() / ".local/bin/my_service",
windows=Path.home() / "AppData/Local/MyService/my_service.exe",
),
default_args=["--serve"], # Optional: appended to the executable
)
manager = ServiceManager(config)
ServiceConfig fields
| Field | Type | Required | Purpose |
|---|---|---|---|
service_name |
str |
yes | Service identifier (used in plist label, systemd unit name, scheduled task name). |
app_dir |
Path |
yes | Per-service runtime directory for logs and state. Created if missing. |
exe_install_location |
PlatformPath |
yes | Per-OS absolute path to the installed executable. Resolved to a single path at install time. |
default_args |
list[str] | None |
no | Arguments appended after the resolved executable when manager.install() is called without program_arguments. |
PlatformPath
A dataclass that holds one path per OS and resolves to the correct one based on platform.system():
from etiket_service_manager import PlatformPath
p = PlatformPath(
darwin=Path("/usr/local/bin/foo"),
linux=Path("/usr/bin/foo"),
windows=Path(r"C:\Program Files\foo\foo.exe"),
)
p.resolve() # → the path matching the running OS
Example Usage
from pathlib import Path
from packaging.version import Version
from etiket_service_manager import PlatformPath, ServiceConfig, ServiceManager
def main():
# 1. Configure: declare where the executable lives on each OS and the
# default invocation. The same config works across all three OSes.
config = ServiceConfig(
service_name="my_service",
app_dir=Path.home() / ".my_service",
exe_install_location=PlatformPath(
darwin=Path("/Applications/MyService.app/Contents/MacOS/my_service"),
linux=Path.home() / ".local/bin/my_service",
windows=Path.home() / "AppData/Local/MyService/my_service.exe",
),
default_args=["--serve"],
)
manager = ServiceManager(config)
# 2. Install. With exe_install_location + default_args set on the config,
# program_arguments is inferred — no need to pass it.
manager.install(
version=Version("1.0.0"),
raise_if_already_installed=True,
)
# If you need a one-off override, pass program_arguments explicitly:
# manager.install(version=Version("1.0.0"),
# program_arguments=["/custom/path", "--debug"])
# 3. Check status
print(f"Service status: {manager.status}")
# 4. Stop / disable / uninstall as needed
manager.stop()
manager.disable()
manager.uninstall()
if __name__ == "__main__":
main()
Platform Specific Details
Windows Services
This application is implemented as a Scheduled Task rather than a Windows service. A scheduled task can run without administrator permissions, unlike Windows services.
The scheduled task:
- Runs as a background process with
wscript(hidden window). - Starts automatically when the user logs in.
- Provides support for process recovery when it terminates unexpectedly.
Requirements
- The service name is used as the Task Name.
- Tasks are created with "LeastPrivilege" run level, so no UAC prompt is needed.
Logging
- Behavior: Unlike Linux/macOS, Windows Task Scheduler does not capture or redirect Standard Output (
stdout) or Error (stderr). Any output printed to the console is lost. - Requirement: Your application must internally handle logging to files.
- Do not rely on
print(). - Use a logging library (e.g., Python's
loggingmodule) to write directly to a file.
- Do not rely on
- Suggested Location:
{app_dir}/logs/to match other platforms.
macOS Services
This document outlines the process for creating and managing macOS services using launchctl. These services run in the GUI session of the logged-in user (LaunchAgents).
Installation Locations
- Service configuration file:
~/Library/LaunchAgents/com.quantum-machines.{service_name}.plist - Executable: ship as a code-signed
.appbundle in~/Applications/{company}/{app_name}.app(per-user, no admin required, Finder-discoverable for Privacy & Security grants) or/Applications/{app_name}.app(system-wide). For QHarbor'setiket_service_runnerthe canonical path is~/Applications/quantum_machines/eTiKeT Service.app/Contents/MacOS/etiket_service_runner. - Runtime data (
app_dir): kept separate from the executable, in~/Library/Application Support/{company}/. - Logs:
{app_dir}/{service_name}_logs/
[!IMPORTANT] Ship the executable as a
.appbundle (withCFBundleIdentifier,CFBundleExecutable,LSUIElement=truefor background services, and anyNSXxxUsageDescriptionkeys the agent needs). Bare Mach-O binaries cannot be cleanly granted permissions in System Settings → Privacy & Security and don't trigger TCC prompts with usable descriptions. The bundle ID + signing identity are what TCC keys grants on, so keep them stable across releases.
[!IMPORTANT] The service is configured with
WorkingDirectoryset to theapp_dir. If your application uses relative paths for resources or imports, the executable still belongs in the.appbundle —app_diris for runtime data only.
The service definition (plist) includes:
KeepAlive: True (system attempts to restart it if it crashes)RunAtLoad: True (starts immediately upon load/login)ThrottleInterval: 60 seconds
Linux Services
Service in Linux are implemented using systemd user services. This is a robust system that works very well for user-level background processes.
Locations
- Configuration: The systemd user unit file (
{service_name}.service) is created in~/.config/systemd/user/. - Logs: Managed by systemd. View logs using:
journalctl --user -u {service_name}
- Use
-fto follow logs in real-time. - Use
-eto jump to the end.
- Use
- Application Binary: The application executable should be in a stable, user-accessible location.
- Recommended:
~/.local/bin/for standalone binaries. - Note: Self-contained application directories often reside in
~/.local/share/. - Important: Always provide the absolute path to the executable when installing the service.
- Recommended:
Behavior
- Uses
systemctl --usercommands to manage the service. - defined as
Type=simple. - Configured with
Restart=alwaysand a 5-second delay to ensure reliability.
Release files for etiket-service-manager 0.3.0b8
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Built distributions (wheels)
Total release size: 35.5 MB
Release files / etiket_service_manager-0.3.0b8-cp314-cp314-win_amd64.whl
| Download URL | etiket_service_manager-0.3.0b8-cp314-cp314-win_amd64.whl |
|---|---|
| Size | 709.6 kB |
| Tags | CPython 3.14 Windows x86-64 |
|
SHA-256 checksum How to use checksums |
7157c887515de911eea972eb007ae0f264d30b0e6a4d4a4bd5152b1e0f629f61
|
|
BLAKE2b-256 checksum How to use checksums |
6b0721805f9c507c757c9de40e14ae63dc72797ca9d6404ac69c4239c770bbb3
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Release files / etiket_service_manager-0.3.0b8-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl
| Download URL | etiket_service_manager-0.3.0b8-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl |
|---|---|
| Size | 4.7 MB |
| Tags | CPython 3.14 Linux glibc 2.17+ x86-64 Linux glibc 2.28+ x86-64 |
|
SHA-256 checksum How to use checksums |
9a169fa05f557305452b888fc79917286eef613e00a3a797ecdfe8dc9956fea5
|
|
BLAKE2b-256 checksum How to use checksums |
352526c3063caa4dbdeaa462ef4858dd43611faa6dbc65de3f109ed80bb39f49
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Release files / etiket_service_manager-0.3.0b8-cp314-cp314-macosx_11_0_x86_64.whl
| Download URL | etiket_service_manager-0.3.0b8-cp314-cp314-macosx_11_0_x86_64.whl |
|---|---|
| Size | 801.2 kB |
| Tags | CPython 3.14 macOS 11.0+ x86-64 |
|
SHA-256 checksum How to use checksums |
401299812c73c6374831a2637a5dc93f40a6eb69e2e4249cc4d3b5da9137164d
|
|
BLAKE2b-256 checksum How to use checksums |
0b2dbf0ca0424a8f9fb2e68f6d58655ca768bd0e38d703779085dada740ddad1
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Release files / etiket_service_manager-0.3.0b8-cp314-cp314-macosx_11_0_arm64.whl
| Download URL | etiket_service_manager-0.3.0b8-cp314-cp314-macosx_11_0_arm64.whl |
|---|---|
| Size | 741.2 kB |
| Tags | CPython 3.14 macOS 11.0+ ARM64 |
|
SHA-256 checksum How to use checksums |
f7c17dfcbdcd21dcaa551417f5ed1cd0cea369d9e84b86021fb42e7ba8bb3b3a
|
|
BLAKE2b-256 checksum How to use checksums |
bc86ac65e2202795dfb9b18ab3f38b29c2a171a6f167cb4e3f7497c5190eab8b
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Release files / etiket_service_manager-0.3.0b8-cp313-cp313-win_amd64.whl
| Download URL | etiket_service_manager-0.3.0b8-cp313-cp313-win_amd64.whl |
|---|---|
| Size | 692.2 kB |
| Tags | CPython 3.13 Windows x86-64 |
|
SHA-256 checksum How to use checksums |
499e1866127a170f6a4d7ce75c6f68e71651a4c636671c87e5d1d0ab2aab0f86
|
|
BLAKE2b-256 checksum How to use checksums |
c3356305b58f19067b99b420273fdedd25d96247404a355aa83fa5f214b7e187
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Release files / etiket_service_manager-0.3.0b8-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl
| Download URL | etiket_service_manager-0.3.0b8-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl |
|---|---|
| Size | 4.8 MB |
| Tags | CPython 3.13 Linux glibc 2.17+ x86-64 Linux glibc 2.28+ x86-64 |
|
SHA-256 checksum How to use checksums |
6d64298f457465bb8144409b25b2e420fa20479b21662511264cfdf4bb9493fb
|
|
BLAKE2b-256 checksum How to use checksums |
1538a58ce8f8019ebeb7e4ebb262a5bde8b803f422cd6e7b4c2b3c80dd191665
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Release files / etiket_service_manager-0.3.0b8-cp313-cp313-macosx_11_0_x86_64.whl
| Download URL | etiket_service_manager-0.3.0b8-cp313-cp313-macosx_11_0_x86_64.whl |
|---|---|
| Size | 802.0 kB |
| Tags | CPython 3.13 macOS 11.0+ x86-64 |
|
SHA-256 checksum How to use checksums |
86a07fbfc7755418c2fd4851a925e91ef604653056865d3b98eb33db77ca634b
|
|
BLAKE2b-256 checksum How to use checksums |
59914701b5516b16a2f4b38d47cf742e56f3507934fc03e71ed4bf695e5576cc
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Release files / etiket_service_manager-0.3.0b8-cp313-cp313-macosx_11_0_arm64.whl
| Download URL | etiket_service_manager-0.3.0b8-cp313-cp313-macosx_11_0_arm64.whl |
|---|---|
| Size | 736.0 kB |
| Tags | CPython 3.13 macOS 11.0+ ARM64 |
|
SHA-256 checksum How to use checksums |
7f5b336fdc9cd1aa4ead25d62e4b11f0827774e19e95cde555f0983ab4c256f9
|
|
BLAKE2b-256 checksum How to use checksums |
3eb22b3c83eb052f65f91a4f82a1963b64ee6d8afeef94e789c0da0ec8a0fe71
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Release files / etiket_service_manager-0.3.0b8-cp312-cp312-win_amd64.whl
| Download URL | etiket_service_manager-0.3.0b8-cp312-cp312-win_amd64.whl |
|---|---|
| Size | 705.9 kB |
| Tags | CPython 3.12 Windows x86-64 |
|
SHA-256 checksum How to use checksums |
0c04fd9369952ad72246d9b561ea2f83419b80af43b4e9ab995871276cfb9948
|
|
BLAKE2b-256 checksum How to use checksums |
d6cf80e2b64ee588c86c745128005da847f08c6b9c9b7ab4f83e87bd6320fe8e
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Release files / etiket_service_manager-0.3.0b8-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl
| Download URL | etiket_service_manager-0.3.0b8-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl |
|---|---|
| Size | 4.9 MB |
| Tags | CPython 3.12 Linux glibc 2.17+ x86-64 Linux glibc 2.28+ x86-64 |
|
SHA-256 checksum How to use checksums |
c516e32f7b7e3680f600d4b9116976a83954458a3f88ac298b36e9d7f724da7b
|
|
BLAKE2b-256 checksum How to use checksums |
d7d74547f01524018e6120e86bd5155e4c95e6c550853be3bfdb95411779179c
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Release files / etiket_service_manager-0.3.0b8-cp312-cp312-macosx_11_0_x86_64.whl
| Download URL | etiket_service_manager-0.3.0b8-cp312-cp312-macosx_11_0_x86_64.whl |
|---|---|
| Size | 810.2 kB |
| Tags | CPython 3.12 macOS 11.0+ x86-64 |
|
SHA-256 checksum How to use checksums |
4a02b6cd8f35f81d3f6dd5e5e11bc3dbfaf21c3a8c94f3d6a1d03554b9d7d2c0
|
|
BLAKE2b-256 checksum How to use checksums |
e0b46a6dd50b20c58890692e5939750b69faf79857f64947585f559d266b8781
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Release files / etiket_service_manager-0.3.0b8-cp312-cp312-macosx_11_0_arm64.whl
| Download URL | etiket_service_manager-0.3.0b8-cp312-cp312-macosx_11_0_arm64.whl |
|---|---|
| Size | 746.8 kB |
| Tags | CPython 3.12 macOS 11.0+ ARM64 |
|
SHA-256 checksum How to use checksums |
347c6bdaa453a95a5527864334460ca4adf02fdd9a1b60acc8c9046c7063dc87
|
|
BLAKE2b-256 checksum How to use checksums |
5ac9c8bb7e87a1ccb7d38740649bf0eac122aba1639afaf5a6c40130211fd670
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Release files / etiket_service_manager-0.3.0b8-cp311-cp311-win_amd64.whl
| Download URL | etiket_service_manager-0.3.0b8-cp311-cp311-win_amd64.whl |
|---|---|
| Size | 727.5 kB |
| Tags | CPython 3.11 Windows x86-64 |
|
SHA-256 checksum How to use checksums |
a34eaacddeac8965cc61f0a0816ac2a32ddb00638577fc39c6959e9440da0915
|
|
BLAKE2b-256 checksum How to use checksums |
96e2c49136a6a689887e4207d4e35803238e3ec6cc36a96fc11983a33fd78b28
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Release files / etiket_service_manager-0.3.0b8-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl
| Download URL | etiket_service_manager-0.3.0b8-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl |
|---|---|
| Size | 4.9 MB |
| Tags | CPython 3.11 Linux glibc 2.17+ x86-64 Linux glibc 2.28+ x86-64 |
|
SHA-256 checksum How to use checksums |
208f237b0b332573aab21d04e3a0acfcdc819c8e2da3eb005edfee2343453932
|
|
BLAKE2b-256 checksum How to use checksums |
e471f6c62bda8a90b68cfdc8888fe0a24f7ed76b0bee99f3b0697c0dbb079332
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Release files / etiket_service_manager-0.3.0b8-cp311-cp311-macosx_11_0_x86_64.whl
| Download URL | etiket_service_manager-0.3.0b8-cp311-cp311-macosx_11_0_x86_64.whl |
|---|---|
| Size | 803.8 kB |
| Tags | CPython 3.11 macOS 11.0+ x86-64 |
|
SHA-256 checksum How to use checksums |
2d38cc7511de1ff6346c18a2c9d5cca045a2ea6c1b65311009f471a4eab0c7a8
|
|
BLAKE2b-256 checksum How to use checksums |
121b1c19d5958a75412af6892c34502c401fff3e4820c7ca49b6d1c832fa39c6
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Release files / etiket_service_manager-0.3.0b8-cp311-cp311-macosx_11_0_arm64.whl
| Download URL | etiket_service_manager-0.3.0b8-cp311-cp311-macosx_11_0_arm64.whl |
|---|---|
| Size | 748.9 kB |
| Tags | CPython 3.11 macOS 11.0+ ARM64 |
|
SHA-256 checksum How to use checksums |
a5a365ebed7c93f1fe48aecff4b0d22c736b8e5512c4429ca166a41d64a3f163
|
|
BLAKE2b-256 checksum How to use checksums |
8a527532e324c11b39b16d9fb7fb7dc73d6cb0d1eaf9101b7033e40f15e2b23b
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Release files / etiket_service_manager-0.3.0b8-cp310-cp310-win_amd64.whl
| Download URL | etiket_service_manager-0.3.0b8-cp310-cp310-win_amd64.whl |
|---|---|
| Size | 733.0 kB |
| Tags | CPython 3.10 Windows x86-64 |
|
SHA-256 checksum How to use checksums |
bb9430d9011dbd99b55b2a99417f3bbef3a1beba15beab38793c1ab5f949c831
|
|
BLAKE2b-256 checksum How to use checksums |
bb2d4a3a0d8459913248292399907ede01de4d1d6f5dca38db02c377916eb007
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Release files / etiket_service_manager-0.3.0b8-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl
| Download URL | etiket_service_manager-0.3.0b8-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl |
|---|---|
| Size | 4.7 MB |
| Tags | CPython 3.10 Linux glibc 2.17+ x86-64 Linux glibc 2.28+ x86-64 |
|
SHA-256 checksum How to use checksums |
7516dffddf73e612a04f6dea4f24235765791c8fd07a5376c31978450d1dbae2
|
|
BLAKE2b-256 checksum How to use checksums |
65b379b61a141e0e86306126f6ad02e593efa4dd7d29803453f2ec9a59418f11
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Release files / etiket_service_manager-0.3.0b8-cp310-cp310-macosx_11_0_x86_64.whl
| Download URL | etiket_service_manager-0.3.0b8-cp310-cp310-macosx_11_0_x86_64.whl |
|---|---|
| Size | 818.2 kB |
| Tags | CPython 3.10 macOS 11.0+ x86-64 |
|
SHA-256 checksum How to use checksums |
52eb9c9522547335ce13a88fae5cbd864ecf13af645b7d83006642ec3e51168e
|
|
BLAKE2b-256 checksum How to use checksums |
86f351523e016bfd3ff74a05eb3842abaf28b6fe94c8a32cd2c6ca9662c18d7a
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Release files / etiket_service_manager-0.3.0b8-cp310-cp310-macosx_11_0_arm64.whl
| Download URL | etiket_service_manager-0.3.0b8-cp310-cp310-macosx_11_0_arm64.whl |
|---|---|
| Size | 763.0 kB |
| Tags | CPython 3.10 macOS 11.0+ ARM64 |
|
SHA-256 checksum How to use checksums |
59d30ff34558f35e43865dc3baf35993a1de7b6dce04b609a02e9941194d8901
|
|
BLAKE2b-256 checksum How to use checksums |
e127fa4a803b983620d761ae4effd38322b6e140e43db959deab1096c5b20a64
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|