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.0b5
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Built distributions (wheels)
Total release size: 34.5 MB
Release files / etiket_service_manager-0.3.0b5-cp314-cp314-win_amd64.whl
| Download URL | etiket_service_manager-0.3.0b5-cp314-cp314-win_amd64.whl |
|---|---|
| Size | 697.0 kB |
| Tags | CPython 3.14 Windows x86-64 |
|
SHA-256 checksum How to use checksums |
98a9627ced61f2125644f794922ea475b9e5100372c514a3194828a300f0d761
|
|
BLAKE2b-256 checksum How to use checksums |
7daf7b6ec50401c3c334dd237913137319cd9443231c22d02152d78f8a16c709
|
| 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.0b5-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl
| Download URL | etiket_service_manager-0.3.0b5-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl |
|---|---|
| Size | 4.6 MB |
| Tags | CPython 3.14 Linux glibc 2.17+ x86-64 Linux glibc 2.28+ x86-64 |
|
SHA-256 checksum How to use checksums |
2822fee1aa055f679b794fe1e999f39264257deaff5173085a53974f468beab4
|
|
BLAKE2b-256 checksum How to use checksums |
1483ed975986ceea3d0073c2cb5e1e6a1d7f6873505b00469d1445077f24191d
|
| 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.0b5-cp314-cp314-macosx_11_0_x86_64.whl
| Download URL | etiket_service_manager-0.3.0b5-cp314-cp314-macosx_11_0_x86_64.whl |
|---|---|
| Size | 768.8 kB |
| Tags | CPython 3.14 macOS 11.0+ x86-64 |
|
SHA-256 checksum How to use checksums |
1fd2ac7a55f47daad1249ceca18069d5c37236353a7ecb84830d712048395c50
|
|
BLAKE2b-256 checksum How to use checksums |
6277f826ce7e8680101ea18cdf05920aa82cf3f9afb45a9ef0129ae0703d4241
|
| 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.0b5-cp314-cp314-macosx_11_0_arm64.whl
| Download URL | etiket_service_manager-0.3.0b5-cp314-cp314-macosx_11_0_arm64.whl |
|---|---|
| Size | 713.4 kB |
| Tags | CPython 3.14 macOS 11.0+ ARM64 |
|
SHA-256 checksum How to use checksums |
db5c221642810b6aca553495b8334f9b3e9036d9eb9318c7acd203d39bfe9f44
|
|
BLAKE2b-256 checksum How to use checksums |
0089034ad506d91798fc3aed20e4ea89691bb1c4359916b7e89e3252696be157
|
| 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.0b5-cp313-cp313-win_amd64.whl
| Download URL | etiket_service_manager-0.3.0b5-cp313-cp313-win_amd64.whl |
|---|---|
| Size | 681.5 kB |
| Tags | CPython 3.13 Windows x86-64 |
|
SHA-256 checksum How to use checksums |
1c25897534e3cba10e5e0d74c0c2261befdb83c46cb327a34cd108a4ec41c95c
|
|
BLAKE2b-256 checksum How to use checksums |
aa9794e66e5dc8b08e61da1403241c810ec002c4bbfea94e868353a4c5c1b0b5
|
| 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.0b5-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl
| Download URL | etiket_service_manager-0.3.0b5-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl |
|---|---|
| Size | 4.7 MB |
| Tags | CPython 3.13 Linux glibc 2.17+ x86-64 Linux glibc 2.28+ x86-64 |
|
SHA-256 checksum How to use checksums |
127878f5931aca945610fff6c5cb68e232e0379806487bde9f8f0d87dfdaefe9
|
|
BLAKE2b-256 checksum How to use checksums |
3f56acc410eebbda20f3fc41426be4dccb1712c6213ede5b482080fca68dac7d
|
| 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.0b5-cp313-cp313-macosx_11_0_x86_64.whl
| Download URL | etiket_service_manager-0.3.0b5-cp313-cp313-macosx_11_0_x86_64.whl |
|---|---|
| Size | 769.2 kB |
| Tags | CPython 3.13 macOS 11.0+ x86-64 |
|
SHA-256 checksum How to use checksums |
ca71e50ad9a5807728a0cfdead18351f26c8f470728ab29133afabe45a416742
|
|
BLAKE2b-256 checksum How to use checksums |
2a1b1071e6e6bc011519e3ef269d11acac4ef13a12a454281a51b812b29e9de5
|
| 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.0b5-cp313-cp313-macosx_11_0_arm64.whl
| Download URL | etiket_service_manager-0.3.0b5-cp313-cp313-macosx_11_0_arm64.whl |
|---|---|
| Size | 708.7 kB |
| Tags | CPython 3.13 macOS 11.0+ ARM64 |
|
SHA-256 checksum How to use checksums |
63d63f4c18280bdc4860d8de1d553b3cd3d9d31bd16550e6e6b902fc18e5d7a4
|
|
BLAKE2b-256 checksum How to use checksums |
6427e6fd70fdd39e7d61bf2866a9661ee705e42505f4452410b5f5aa5bb07929
|
| 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.0b5-cp312-cp312-win_amd64.whl
| Download URL | etiket_service_manager-0.3.0b5-cp312-cp312-win_amd64.whl |
|---|---|
| Size | 696.1 kB |
| Tags | CPython 3.12 Windows x86-64 |
|
SHA-256 checksum How to use checksums |
8c2c782ef350c4a0395fb3488c13f43d2ad7428cffc420642877fdc4ac31235a
|
|
BLAKE2b-256 checksum How to use checksums |
78bde0b4ac256a4e852f87e0c22f6322dda88c9e125fc351a59c138bffd92610
|
| 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.0b5-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl
| Download URL | etiket_service_manager-0.3.0b5-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl |
|---|---|
| Size | 4.8 MB |
| Tags | CPython 3.12 Linux glibc 2.17+ x86-64 Linux glibc 2.28+ x86-64 |
|
SHA-256 checksum How to use checksums |
da7bdee67709d16407f77fe1869c59934da8023d46694cc3f20d4b55992c23ec
|
|
BLAKE2b-256 checksum How to use checksums |
2993fae1f2541bcefab7df17db346a853799fc6b9709836fd94c7966dc0e1e06
|
| 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.0b5-cp312-cp312-macosx_11_0_x86_64.whl
| Download URL | etiket_service_manager-0.3.0b5-cp312-cp312-macosx_11_0_x86_64.whl |
|---|---|
| Size | 776.7 kB |
| Tags | CPython 3.12 macOS 11.0+ x86-64 |
|
SHA-256 checksum How to use checksums |
104943b67bef03dfc3a48cd15d0225d99b597113aef9c95d2c4ed41c31a2fe2d
|
|
BLAKE2b-256 checksum How to use checksums |
b20a2a4fce7f537bfcee34b80ae65c03b5643402f74165106ea96db3a864dbe9
|
| 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.0b5-cp312-cp312-macosx_11_0_arm64.whl
| Download URL | etiket_service_manager-0.3.0b5-cp312-cp312-macosx_11_0_arm64.whl |
|---|---|
| Size | 719.1 kB |
| Tags | CPython 3.12 macOS 11.0+ ARM64 |
|
SHA-256 checksum How to use checksums |
3820f94133cb000e04355731154cb0bc7f067bd29118bc4e8ca08249b4a12cee
|
|
BLAKE2b-256 checksum How to use checksums |
0896906f800d196ec52f4496924e4de05fca44c8f7fd2deefe0282b4f0a31247
|
| 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.0b5-cp311-cp311-win_amd64.whl
| Download URL | etiket_service_manager-0.3.0b5-cp311-cp311-win_amd64.whl |
|---|---|
| Size | 712.0 kB |
| Tags | CPython 3.11 Windows x86-64 |
|
SHA-256 checksum How to use checksums |
e6631c67d14af04de4e9aaf4422daac42efd2e06687c7a302713538492321083
|
|
BLAKE2b-256 checksum How to use checksums |
030d8244c1a230006e8e5e36f85fa8b3dd90427891371d2093a96f0250e8f5f6
|
| 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.0b5-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl
| Download URL | etiket_service_manager-0.3.0b5-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl |
|---|---|
| Size | 4.8 MB |
| Tags | CPython 3.11 Linux glibc 2.17+ x86-64 Linux glibc 2.28+ x86-64 |
|
SHA-256 checksum How to use checksums |
8185014c3140fd73ed3e876d8fad0f1e87394fa8b13073533932a2b99eca0654
|
|
BLAKE2b-256 checksum How to use checksums |
708a0104f5a84d2adddbb67ce6a9d02920eb871b8650615bace11c596df0ae10
|
| 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.0b5-cp311-cp311-macosx_11_0_x86_64.whl
| Download URL | etiket_service_manager-0.3.0b5-cp311-cp311-macosx_11_0_x86_64.whl |
|---|---|
| Size | 787.7 kB |
| Tags | CPython 3.11 macOS 11.0+ x86-64 |
|
SHA-256 checksum How to use checksums |
3cc04ee955b165ad4d01d847d9d1ebc8ff5da0b33de190e466182ceb1cd224e1
|
|
BLAKE2b-256 checksum How to use checksums |
3502c5917c34bde5505116e12a42ffaabd4e2ed4b272b90d07ae8492e6b15a37
|
| 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.0b5-cp311-cp311-macosx_11_0_arm64.whl
| Download URL | etiket_service_manager-0.3.0b5-cp311-cp311-macosx_11_0_arm64.whl |
|---|---|
| Size | 733.0 kB |
| Tags | CPython 3.11 macOS 11.0+ ARM64 |
|
SHA-256 checksum How to use checksums |
aeb8f37fcb1961e2633b0a64d765476fea64c41dff0074b9bbdb4778b270378b
|
|
BLAKE2b-256 checksum How to use checksums |
e43a22565b19c9dcfe6bd2dc395316c15cf2e65ef1b53766e179bd1f246d68a9
|
| 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.0b5-cp310-cp310-win_amd64.whl
| Download URL | etiket_service_manager-0.3.0b5-cp310-cp310-win_amd64.whl |
|---|---|
| Size | 710.0 kB |
| Tags | CPython 3.10 Windows x86-64 |
|
SHA-256 checksum How to use checksums |
795ed702b256229ce16b12d1fac8d627f225a74c49568d1fbbd2edcc4810ee2e
|
|
BLAKE2b-256 checksum How to use checksums |
91749e48a91c16c3802164a624befa009583ef4804f2707479395a8dd020e8e3
|
| 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.0b5-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl
| Download URL | etiket_service_manager-0.3.0b5-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl |
|---|---|
| Size | 4.5 MB |
| Tags | CPython 3.10 Linux glibc 2.17+ x86-64 Linux glibc 2.28+ x86-64 |
|
SHA-256 checksum How to use checksums |
5a83251407d9a898c9ba4215ecdf4266bf4c840a60d2214ac39a499d4bd47072
|
|
BLAKE2b-256 checksum How to use checksums |
e1661986e53e1a8ee438b0865fdb23051521dd903072bb5b61a6003e3ce02161
|
| 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.0b5-cp310-cp310-macosx_11_0_x86_64.whl
| Download URL | etiket_service_manager-0.3.0b5-cp310-cp310-macosx_11_0_x86_64.whl |
|---|---|
| Size | 795.0 kB |
| Tags | CPython 3.10 macOS 11.0+ x86-64 |
|
SHA-256 checksum How to use checksums |
02c82d9d84806c7f0c51a4b6f992a77dbbbe7a1ba858c5a4ca70f77c5aa25c5e
|
|
BLAKE2b-256 checksum How to use checksums |
886cb8f3227f5b7de70ce43b633a6d0d7caab536fb70afe63779f710cfb7acf6
|
| 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.0b5-cp310-cp310-macosx_11_0_arm64.whl
| Download URL | etiket_service_manager-0.3.0b5-cp310-cp310-macosx_11_0_arm64.whl |
|---|---|
| Size | 740.2 kB |
| Tags | CPython 3.10 macOS 11.0+ ARM64 |
|
SHA-256 checksum How to use checksums |
3a0c53999685a97a2edf610a07ea6b3c8cabb157b44dd8843e3482cc3b74d75e
|
|
BLAKE2b-256 checksum How to use checksums |
a1d5033fb07a1b5addbb955865389c24329331697fd839cac020bc317c9e21c4
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|