desktop-app
==========
`desktop-app` simplifies making a Python GUI application install, launch, and behave in
a standard way with respect to the application menus and the taskbar in Windows and
Linux (Macos support planned).
If your application is a Python module runnable from the command line as `python -m
mymodule`, then with minimal configuration `desktop-app` can:
* Create a launcher script (or `.exe` on windows) that runs your application
* after activating a `conda` env or virtual environment, if any
* with a hidden console if on Windows
* Install a start menu shortcut (Windows) or `.desktop` file (Linux) to launch your
application from your desktop applications menu
* Ensure your application appears in the taskbar with the correct name and icon,
and can be pinned correctly.
Basic Usage
===========
Here we'll follow the example in this repository for a module called `oink`, developed
by Old MacDonald's Farm. Before Old MacDonald had heard of `desktop-app`, he had a
package that looked like this:
```
.
├── oink
│ ├── __init__.py
│ └── __main__.py
└── setup.py
```
Where `setup.py` is:
```python
from setuptools import setup
setup(
name='oink',
version='1.0',
author='Old MacDonald',
author_email="macdonald@eie.io",
url='http://eie.io',
packages=["oink"],
setup_requires=['setuptools'],
)
```
`__main__.py` is:
```python
import tkinter
root = tkinter.Tk()
root.geometry("300x300")
w = tkinter.Label(root, text="Oink!")
w.place(relx=0.5, rely=0.5, anchor=tkinter.CENTER)
root.mainloop()
```
And `__init__.py` is empty.
After installing this package somewhere, MacDonald can run it from a terminal with
`python -m oink`, and it shows a little window
[README still in progress!]
Reasons
=======
Why a hidden console on Windows?
--------------------------------
The usual recommendation to run Python GUI applications is with `Pythonw.exe`, which
does not create a console window. However, when running under `Pythonw.exe`, a simple
`print()` call will raise an exception, and [certain low-level output
redirection](https://github.com/labscript-suite/lyse/issues/48#issuecomment-609371880)
of subprocesses does not work due to the `stdout` and `stderr` filehandles not existing.
Furthermore, some tools may create subprocesses that call `cmd.exe`, or `Python.exe`,
briefly popping up console windows of their own since one doesn't already exist.
In order to be able to ignore these problems and code the same as you would with a
console, in Windows the launcher script runs your application in a subprocess using
`Python.exe`, but with the `CREATE_NO_WINDOW` flag so that the console exists, but is
not visible.
Why activate environments?
--------------------------
Activating environments is not strictly necessary except when using conda on Windows, in
which case some compiled extensions (notably, Qt libraries) cannot be imported unless
the environment is active.
However, even on other platforms activating the environment simplifies running other
programs that might be installed to the `bin`/`Scripts` directory of the virtual
environment - calling code would otherwise have to manually find this directory and
provide the full path to the programs it wants to run.
Raw data
{
"_id": null,
"home_page": "http://github.com/chrisjbillington/desktop-app",
"name": "desktop-app",
"maintainer": "",
"docs_url": null,
"requires_python": ">=3.6",
"maintainer_email": "",
"keywords": "desktop windows launchers taskbar start-menu",
"author": "Chris Billington",
"author_email": "chrisjbillington@gmail.com",
"download_url": "https://files.pythonhosted.org/packages/55/52/306696f835b1a5669520a4b933e18d25b3f13d611bb4d85737ca4eedb683/desktop-app-0.4.1.tar.gz",
"platform": null,
"description": "desktop-app\n==========\n\n`desktop-app` simplifies making a Python GUI application install, launch, and behave in\na standard way with respect to the application menus and the taskbar in Windows and\nLinux (Macos support planned).\n\nIf your application is a Python module runnable from the command line as `python -m\nmymodule`, then with minimal configuration `desktop-app` can:\n\n* Create a launcher script (or `.exe` on windows) that runs your application\n * after activating a `conda` env or virtual environment, if any\n * with a hidden console if on Windows\n* Install a start menu shortcut (Windows) or `.desktop` file (Linux) to launch your\n application from your desktop applications menu\n* Ensure your application appears in the taskbar with the correct name and icon,\n and can be pinned correctly.\n\n\nBasic Usage\n===========\n\nHere we'll follow the example in this repository for a module called `oink`, developed\nby Old MacDonald's Farm. Before Old MacDonald had heard of `desktop-app`, he had a\npackage that looked like this:\n```\n.\n\u251c\u2500\u2500 oink\n\u2502 \u251c\u2500\u2500 __init__.py\n\u2502 \u2514\u2500\u2500 __main__.py\n\u2514\u2500\u2500 setup.py\n```\n\nWhere `setup.py` is:\n```python\nfrom setuptools import setup\n\nsetup(\n name='oink',\n version='1.0',\n author='Old MacDonald',\n author_email=\"macdonald@eie.io\",\n url='http://eie.io',\n packages=[\"oink\"],\n setup_requires=['setuptools'],\n)\n```\n\n`__main__.py` is:\n```python\nimport tkinter\n\nroot = tkinter.Tk()\nroot.geometry(\"300x300\")\nw = tkinter.Label(root, text=\"Oink!\")\nw.place(relx=0.5, rely=0.5, anchor=tkinter.CENTER)\nroot.mainloop()\n```\n\nAnd `__init__.py` is empty.\n\nAfter installing this package somewhere, MacDonald can run it from a terminal with\n`python -m oink`, and it shows a little window\n\n\n[README still in progress!]\n\n\nReasons\n=======\n\nWhy a hidden console on Windows?\n--------------------------------\n\nThe usual recommendation to run Python GUI applications is with `Pythonw.exe`, which\ndoes not create a console window. However, when running under `Pythonw.exe`, a simple\n`print()` call will raise an exception, and [certain low-level output\nredirection](https://github.com/labscript-suite/lyse/issues/48#issuecomment-609371880)\nof subprocesses does not work due to the `stdout` and `stderr` filehandles not existing.\nFurthermore, some tools may create subprocesses that call `cmd.exe`, or `Python.exe`,\nbriefly popping up console windows of their own since one doesn't already exist.\n\nIn order to be able to ignore these problems and code the same as you would with a\nconsole, in Windows the launcher script runs your application in a subprocess using\n`Python.exe`, but with the `CREATE_NO_WINDOW` flag so that the console exists, but is\nnot visible.\n\nWhy activate environments?\n--------------------------\n\nActivating environments is not strictly necessary except when using conda on Windows, in\nwhich case some compiled extensions (notably, Qt libraries) cannot be imported unless\nthe environment is active.\n\nHowever, even on other platforms activating the environment simplifies running other\nprograms that might be installed to the `bin`/`Scripts` directory of the virtual\nenvironment - calling code would otherwise have to manually find this directory and\nprovide the full path to the programs it wants to run.\n\n",
"bugtrack_url": null,
"license": "BSD",
"summary": "OS menu shortcuts, correct taskbar behaviour, and environment activation for Python GUI apps",
"version": "0.4.1",
"project_urls": {
"Homepage": "http://github.com/chrisjbillington/desktop-app"
},
"split_keywords": [
"desktop",
"windows",
"launchers",
"taskbar",
"start-menu"
],
"urls": [
{
"comment_text": "",
"digests": {
"blake2b_256": "ddfca303a8cf6d6dca3f284cf57e44bd3f2320a877855b7a54771acec1e71c08",
"md5": "333b5074f3e7f7d7d048e5ac1d930663",
"sha256": "9e4faadafad4b78032930e8259a10898f2bc6068e631a58e6b1fac82eb352ffb"
},
"downloads": -1,
"filename": "desktop_app-0.4.1-cp310-cp310-macosx_11_0_x86_64.whl",
"has_sig": false,
"md5_digest": "333b5074f3e7f7d7d048e5ac1d930663",
"packagetype": "bdist_wheel",
"python_version": "cp310",
"requires_python": ">=3.6",
"size": 19602,
"upload_time": "2024-02-27T05:24:33",
"upload_time_iso_8601": "2024-02-27T05:24:33.022840Z",
"url": "https://files.pythonhosted.org/packages/dd/fc/a303a8cf6d6dca3f284cf57e44bd3f2320a877855b7a54771acec1e71c08/desktop_app-0.4.1-cp310-cp310-macosx_11_0_x86_64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "64060ebe4312192467d858981350a11de4f4f473c628f17d63c199ff09380142",
"md5": "aa1e1c8d5ae395a0bc0b6fac2f425fc5",
"sha256": "4f5d49116b8b8a8b9d2a49450f1ea93d16615ceb5bf8e28dd386088285073bb5"
},
"downloads": -1,
"filename": "desktop_app-0.4.1-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_24_x86_64.whl",
"has_sig": false,
"md5_digest": "aa1e1c8d5ae395a0bc0b6fac2f425fc5",
"packagetype": "bdist_wheel",
"python_version": "cp310",
"requires_python": ">=3.6",
"size": 34785,
"upload_time": "2024-02-27T05:24:35",
"upload_time_iso_8601": "2024-02-27T05:24:35.031859Z",
"url": "https://files.pythonhosted.org/packages/64/06/0ebe4312192467d858981350a11de4f4f473c628f17d63c199ff09380142/desktop_app-0.4.1-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_24_x86_64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "a31388429ccbe196abe598bc8d7bc5cb3fec9fc0beeb3b893a04c8a9ce429d77",
"md5": "53d0ac2285d2b0f255b839659e8e98aa",
"sha256": "40534a956bf34d7250b7c1c5b90de87bb3ae2c26b7bbe38b92728ae239e7af8c"
},
"downloads": -1,
"filename": "desktop_app-0.4.1-cp310-cp310-win32.whl",
"has_sig": false,
"md5_digest": "53d0ac2285d2b0f255b839659e8e98aa",
"packagetype": "bdist_wheel",
"python_version": "cp310",
"requires_python": ">=3.6",
"size": 23451,
"upload_time": "2024-02-27T05:24:36",
"upload_time_iso_8601": "2024-02-27T05:24:36.715376Z",
"url": "https://files.pythonhosted.org/packages/a3/13/88429ccbe196abe598bc8d7bc5cb3fec9fc0beeb3b893a04c8a9ce429d77/desktop_app-0.4.1-cp310-cp310-win32.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "223bf5621868ccfa4f1de25d5846cbb6762da1567ce104ba505fb43f44e2dd70",
"md5": "fd6148b38f7caf2f4f77e54e9433ca37",
"sha256": "086819bf41ed55eaf842d30c551599301ec5e9c3f92197adc0efae03eb1230ba"
},
"downloads": -1,
"filename": "desktop_app-0.4.1-cp310-cp310-win_amd64.whl",
"has_sig": false,
"md5_digest": "fd6148b38f7caf2f4f77e54e9433ca37",
"packagetype": "bdist_wheel",
"python_version": "cp310",
"requires_python": ">=3.6",
"size": 23890,
"upload_time": "2024-02-27T05:24:37",
"upload_time_iso_8601": "2024-02-27T05:24:37.994820Z",
"url": "https://files.pythonhosted.org/packages/22/3b/f5621868ccfa4f1de25d5846cbb6762da1567ce104ba505fb43f44e2dd70/desktop_app-0.4.1-cp310-cp310-win_amd64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "82e609c96ae516994723e6ff09ccf2cc1f8e5b172a4ecd69e7f34f74802ee873",
"md5": "fb195c71cfa6aecb63e27b2b95e0817b",
"sha256": "8f66fc920ac809d7fcd49f8299b930615624a1a6d55ad128d6e1ebd0feb62fd0"
},
"downloads": -1,
"filename": "desktop_app-0.4.1-cp311-cp311-macosx_10_9_universal2.whl",
"has_sig": false,
"md5_digest": "fb195c71cfa6aecb63e27b2b95e0817b",
"packagetype": "bdist_wheel",
"python_version": "cp311",
"requires_python": ">=3.6",
"size": 20855,
"upload_time": "2024-02-27T05:24:39",
"upload_time_iso_8601": "2024-02-27T05:24:39.166739Z",
"url": "https://files.pythonhosted.org/packages/82/e6/09c96ae516994723e6ff09ccf2cc1f8e5b172a4ecd69e7f34f74802ee873/desktop_app-0.4.1-cp311-cp311-macosx_10_9_universal2.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "8be0f2bfbabf2d425bb9948bb12e45786669b9aded14624128157c738abf5dd4",
"md5": "ca19657de8cf180849772e918cd8ed1b",
"sha256": "abcf9e48fceb2e1d55a83262ed2ee17177f6d938142c1c532da5e137d9dd39d1"
},
"downloads": -1,
"filename": "desktop_app-0.4.1-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_24_x86_64.whl",
"has_sig": false,
"md5_digest": "ca19657de8cf180849772e918cd8ed1b",
"packagetype": "bdist_wheel",
"python_version": "cp311",
"requires_python": ">=3.6",
"size": 35713,
"upload_time": "2024-02-27T05:24:41",
"upload_time_iso_8601": "2024-02-27T05:24:41.678576Z",
"url": "https://files.pythonhosted.org/packages/8b/e0/f2bfbabf2d425bb9948bb12e45786669b9aded14624128157c738abf5dd4/desktop_app-0.4.1-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_24_x86_64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "23b1d9618b3081c2e80245c6fef6a444ea2a3f53be8cd9174b8286c30d0d1204",
"md5": "0b869ce9629d95390450a62263d77a98",
"sha256": "cfbda36f3e5b8969419bdb0c5f9d964d0f62d921903cdfacd81889a4921a1afc"
},
"downloads": -1,
"filename": "desktop_app-0.4.1-cp311-cp311-win32.whl",
"has_sig": false,
"md5_digest": "0b869ce9629d95390450a62263d77a98",
"packagetype": "bdist_wheel",
"python_version": "cp311",
"requires_python": ">=3.6",
"size": 23444,
"upload_time": "2024-02-27T05:24:43",
"upload_time_iso_8601": "2024-02-27T05:24:43.331662Z",
"url": "https://files.pythonhosted.org/packages/23/b1/d9618b3081c2e80245c6fef6a444ea2a3f53be8cd9174b8286c30d0d1204/desktop_app-0.4.1-cp311-cp311-win32.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "fd283d30042f106e3affb54d6949e5a30fe218b475631dfac0bf95e5a38fba5a",
"md5": "3dce777e725dca55d935730ad544b541",
"sha256": "c045db948910bf5e54b862944dd3153ffc1ef10e1af27c7297f603fd79165f3c"
},
"downloads": -1,
"filename": "desktop_app-0.4.1-cp311-cp311-win_amd64.whl",
"has_sig": false,
"md5_digest": "3dce777e725dca55d935730ad544b541",
"packagetype": "bdist_wheel",
"python_version": "cp311",
"requires_python": ">=3.6",
"size": 23886,
"upload_time": "2024-02-27T05:24:45",
"upload_time_iso_8601": "2024-02-27T05:24:45.361562Z",
"url": "https://files.pythonhosted.org/packages/fd/28/3d30042f106e3affb54d6949e5a30fe218b475631dfac0bf95e5a38fba5a/desktop_app-0.4.1-cp311-cp311-win_amd64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "3b8dcb54e19cd523b1b2eda03cefc00ba723d5a218eb3e2a4489348298c657a9",
"md5": "fea4ece24843f75ea8dad588276d323c",
"sha256": "143a8cf704392737eef7d5fa0c3f0d95b8103935be08ab8732a3916b2c09b68a"
},
"downloads": -1,
"filename": "desktop_app-0.4.1-cp37-cp37m-macosx_11_0_x86_64.whl",
"has_sig": false,
"md5_digest": "fea4ece24843f75ea8dad588276d323c",
"packagetype": "bdist_wheel",
"python_version": "cp37",
"requires_python": ">=3.6",
"size": 19603,
"upload_time": "2024-02-27T05:24:46",
"upload_time_iso_8601": "2024-02-27T05:24:46.673207Z",
"url": "https://files.pythonhosted.org/packages/3b/8d/cb54e19cd523b1b2eda03cefc00ba723d5a218eb3e2a4489348298c657a9/desktop_app-0.4.1-cp37-cp37m-macosx_11_0_x86_64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "13b12d6c5e5609d45dfe1bb9ffb9aad672490ff741711d51b4452418178dd28a",
"md5": "c3b8fe24616d0143626843bca608c581",
"sha256": "eb46a4cf0f61076825546705d0f0e8394526ea31079f24ac4f328485edba1f1b"
},
"downloads": -1,
"filename": "desktop_app-0.4.1-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_24_x86_64.whl",
"has_sig": false,
"md5_digest": "c3b8fe24616d0143626843bca608c581",
"packagetype": "bdist_wheel",
"python_version": "cp37",
"requires_python": ">=3.6",
"size": 35931,
"upload_time": "2024-02-27T05:24:48",
"upload_time_iso_8601": "2024-02-27T05:24:48.328049Z",
"url": "https://files.pythonhosted.org/packages/13/b1/2d6c5e5609d45dfe1bb9ffb9aad672490ff741711d51b4452418178dd28a/desktop_app-0.4.1-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_24_x86_64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "51cdfced33f2762c73d78be1608309bac65007e0ca0df625460363e677fefcd3",
"md5": "b4d2c0b0e05841a9403db78935e0e242",
"sha256": "67bab224bd1a1d2bb5857c00dfc4510461260be8ce7c07fa632b609bc3d5639a"
},
"downloads": -1,
"filename": "desktop_app-0.4.1-cp37-cp37m-win32.whl",
"has_sig": false,
"md5_digest": "b4d2c0b0e05841a9403db78935e0e242",
"packagetype": "bdist_wheel",
"python_version": "cp37",
"requires_python": ">=3.6",
"size": 23446,
"upload_time": "2024-02-27T05:24:50",
"upload_time_iso_8601": "2024-02-27T05:24:50.168095Z",
"url": "https://files.pythonhosted.org/packages/51/cd/fced33f2762c73d78be1608309bac65007e0ca0df625460363e677fefcd3/desktop_app-0.4.1-cp37-cp37m-win32.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "4bc65a7224eff301b338fafc2804f1e053738a7be4fa0761c75893a2865bc92e",
"md5": "bdd9846b6d4f9d102608d515bb681924",
"sha256": "545555f4332b31a50c3dfc0bfae1c4dbbe7a58494d335aa29c28d7c67c72ff12"
},
"downloads": -1,
"filename": "desktop_app-0.4.1-cp37-cp37m-win_amd64.whl",
"has_sig": false,
"md5_digest": "bdd9846b6d4f9d102608d515bb681924",
"packagetype": "bdist_wheel",
"python_version": "cp37",
"requires_python": ">=3.6",
"size": 23886,
"upload_time": "2024-02-27T05:24:51",
"upload_time_iso_8601": "2024-02-27T05:24:51.851592Z",
"url": "https://files.pythonhosted.org/packages/4b/c6/5a7224eff301b338fafc2804f1e053738a7be4fa0761c75893a2865bc92e/desktop_app-0.4.1-cp37-cp37m-win_amd64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "b0583d01816829b725e21c7c04048c62c45da77d0e9fdfca190b25d1f0b4adfb",
"md5": "8ab5884f4822f055aa2a2d16e3aac7e1",
"sha256": "5da1e08bbdf4f298116fa2191105698e538bb68307d8cae25ecca321cd3d3065"
},
"downloads": -1,
"filename": "desktop_app-0.4.1-cp38-cp38-macosx_11_0_x86_64.whl",
"has_sig": false,
"md5_digest": "8ab5884f4822f055aa2a2d16e3aac7e1",
"packagetype": "bdist_wheel",
"python_version": "cp38",
"requires_python": ">=3.6",
"size": 19600,
"upload_time": "2024-02-27T05:24:53",
"upload_time_iso_8601": "2024-02-27T05:24:53.163537Z",
"url": "https://files.pythonhosted.org/packages/b0/58/3d01816829b725e21c7c04048c62c45da77d0e9fdfca190b25d1f0b4adfb/desktop_app-0.4.1-cp38-cp38-macosx_11_0_x86_64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "13fdc2380d77f5976918bed561106ed40d72d8aab071e2d0edb7b062f2fd9836",
"md5": "a25c34bc47fc1abb7fdcd299b1f084ec",
"sha256": "58e7299606bdb332dcbefa0cc77d38415622bc4e7e2a907100f596296e27b485"
},
"downloads": -1,
"filename": "desktop_app-0.4.1-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_24_x86_64.whl",
"has_sig": false,
"md5_digest": "a25c34bc47fc1abb7fdcd299b1f084ec",
"packagetype": "bdist_wheel",
"python_version": "cp38",
"requires_python": ">=3.6",
"size": 34838,
"upload_time": "2024-02-27T05:24:54",
"upload_time_iso_8601": "2024-02-27T05:24:54.206815Z",
"url": "https://files.pythonhosted.org/packages/13/fd/c2380d77f5976918bed561106ed40d72d8aab071e2d0edb7b062f2fd9836/desktop_app-0.4.1-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_24_x86_64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "53814e219102ed3688fd8eab0fe6c81c95400fd40d163f8688fa9e0681cb2ad8",
"md5": "d6335d2ff96cbc83b5dcbbade56dc903",
"sha256": "09f4b79659448bb19f2feb88151b4ec6adeccb016af8a6f77251f2f77e34f70f"
},
"downloads": -1,
"filename": "desktop_app-0.4.1-cp38-cp38-win32.whl",
"has_sig": false,
"md5_digest": "d6335d2ff96cbc83b5dcbbade56dc903",
"packagetype": "bdist_wheel",
"python_version": "cp38",
"requires_python": ">=3.6",
"size": 23444,
"upload_time": "2024-02-27T05:24:55",
"upload_time_iso_8601": "2024-02-27T05:24:55.173255Z",
"url": "https://files.pythonhosted.org/packages/53/81/4e219102ed3688fd8eab0fe6c81c95400fd40d163f8688fa9e0681cb2ad8/desktop_app-0.4.1-cp38-cp38-win32.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "eb3427a6141ed983a327e59d555fdb64b06dd9d3d969b467f88a4135d5b2c8b7",
"md5": "e5aa3ac6b34841068cf75e197bab24e0",
"sha256": "5f5df0c6a1cd48a6380c3f3336192b3e23ba9e14fdc6b4f42a98647c9467aeaa"
},
"downloads": -1,
"filename": "desktop_app-0.4.1-cp38-cp38-win_amd64.whl",
"has_sig": false,
"md5_digest": "e5aa3ac6b34841068cf75e197bab24e0",
"packagetype": "bdist_wheel",
"python_version": "cp38",
"requires_python": ">=3.6",
"size": 23883,
"upload_time": "2024-02-27T05:24:56",
"upload_time_iso_8601": "2024-02-27T05:24:56.291939Z",
"url": "https://files.pythonhosted.org/packages/eb/34/27a6141ed983a327e59d555fdb64b06dd9d3d969b467f88a4135d5b2c8b7/desktop_app-0.4.1-cp38-cp38-win_amd64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "5b9d0c8a5c80e4c36e260cb2c77f19f8c7ea955ed8ee3dacf6f6eef71071794c",
"md5": "d4b2a3649fb0e5e1eebe7e3b4056ae6c",
"sha256": "65ff9d66a19e3bedc309baacc65dca8ba924c115802f0d7cd5ba30e59ab022d0"
},
"downloads": -1,
"filename": "desktop_app-0.4.1-cp39-cp39-macosx_11_0_x86_64.whl",
"has_sig": false,
"md5_digest": "d4b2a3649fb0e5e1eebe7e3b4056ae6c",
"packagetype": "bdist_wheel",
"python_version": "cp39",
"requires_python": ">=3.6",
"size": 19597,
"upload_time": "2024-02-27T05:24:57",
"upload_time_iso_8601": "2024-02-27T05:24:57.955303Z",
"url": "https://files.pythonhosted.org/packages/5b/9d/0c8a5c80e4c36e260cb2c77f19f8c7ea955ed8ee3dacf6f6eef71071794c/desktop_app-0.4.1-cp39-cp39-macosx_11_0_x86_64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "6f1d54326ec3f3ca231fd03010d1b0dfde467f795a49615f2175ce92dbc8100e",
"md5": "bc24c8aeab7c68729c5b505bf90aabca",
"sha256": "53ac99c96db6c1dad5c980a04c9461d996eeb23743f7eb93dbf7149923036447"
},
"downloads": -1,
"filename": "desktop_app-0.4.1-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_24_x86_64.whl",
"has_sig": false,
"md5_digest": "bc24c8aeab7c68729c5b505bf90aabca",
"packagetype": "bdist_wheel",
"python_version": "cp39",
"requires_python": ">=3.6",
"size": 34615,
"upload_time": "2024-02-27T05:24:59",
"upload_time_iso_8601": "2024-02-27T05:24:59.144331Z",
"url": "https://files.pythonhosted.org/packages/6f/1d/54326ec3f3ca231fd03010d1b0dfde467f795a49615f2175ce92dbc8100e/desktop_app-0.4.1-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_24_x86_64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "cac40d8a7ddd165ad079af9a530fb3db2ca6d5c4bdf7dc759a59e01b2d0ac689",
"md5": "1cb8b45f75d9ff60fa713f5d5f07b259",
"sha256": "1e78c616d2bbc7427d7de163fc6a513ad24576b8e333174a781ff602e856536d"
},
"downloads": -1,
"filename": "desktop_app-0.4.1-cp39-cp39-win32.whl",
"has_sig": false,
"md5_digest": "1cb8b45f75d9ff60fa713f5d5f07b259",
"packagetype": "bdist_wheel",
"python_version": "cp39",
"requires_python": ">=3.6",
"size": 23447,
"upload_time": "2024-02-27T05:25:00",
"upload_time_iso_8601": "2024-02-27T05:25:00.168348Z",
"url": "https://files.pythonhosted.org/packages/ca/c4/0d8a7ddd165ad079af9a530fb3db2ca6d5c4bdf7dc759a59e01b2d0ac689/desktop_app-0.4.1-cp39-cp39-win32.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "783e258ab9ee4d6e6fdb1ee8638e5efa9c506697cb135dce4027f4058de3c171",
"md5": "c47e494af9852238b78aa1da2f93e7cb",
"sha256": "d80a597374e59d159de59e588df3f24186827c915de9eafb3759d00904efb378"
},
"downloads": -1,
"filename": "desktop_app-0.4.1-cp39-cp39-win_amd64.whl",
"has_sig": false,
"md5_digest": "c47e494af9852238b78aa1da2f93e7cb",
"packagetype": "bdist_wheel",
"python_version": "cp39",
"requires_python": ">=3.6",
"size": 23888,
"upload_time": "2024-02-27T05:25:01",
"upload_time_iso_8601": "2024-02-27T05:25:01.872719Z",
"url": "https://files.pythonhosted.org/packages/78/3e/258ab9ee4d6e6fdb1ee8638e5efa9c506697cb135dce4027f4058de3c171/desktop_app-0.4.1-cp39-cp39-win_amd64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "5552306696f835b1a5669520a4b933e18d25b3f13d611bb4d85737ca4eedb683",
"md5": "43dca0a0850cfec7db5e8e5812fd7913",
"sha256": "7793e41b2764840d8f55444b320d721d203c0d156305ec36789eb0cc61c9ef20"
},
"downloads": -1,
"filename": "desktop-app-0.4.1.tar.gz",
"has_sig": false,
"md5_digest": "43dca0a0850cfec7db5e8e5812fd7913",
"packagetype": "sdist",
"python_version": "source",
"requires_python": ">=3.6",
"size": 57058,
"upload_time": "2024-02-27T05:25:04",
"upload_time_iso_8601": "2024-02-27T05:25:04.157063Z",
"url": "https://files.pythonhosted.org/packages/55/52/306696f835b1a5669520a4b933e18d25b3f13d611bb4d85737ca4eedb683/desktop-app-0.4.1.tar.gz",
"yanked": false,
"yanked_reason": null
}
],
"upload_time": "2024-02-27 05:25:04",
"github": true,
"gitlab": false,
"bitbucket": false,
"codeberg": false,
"github_user": "chrisjbillington",
"github_project": "desktop-app",
"travis_ci": false,
"coveralls": false,
"github_actions": true,
"lcname": "desktop-app"
}