Description
https://python-poetry.org/docs/pyproject/#gui-scripts
When a script is added or updated, run poetry install to make them available in the project’s virtualenv.
However, on Windows, any GUI scripts defined here are not actually made available in the <venv>\Scripts folder. So defining a gui-script named "mygui", running poetry install, and then running mygui from the active venv or poetry run mygui fails with the following output:
'mygui' is not recognized as an internal or external command,
operable program or batch file.
This only affects the virtual env, as GUI scripts defined here are properly included in the built wheel's entry_points.txt when running poetry build.
Here is a very simple GUI script to go along with the pyproject.toml further down:
from PySide6 import QtWidgets
def main():
app = QtWidgets.QApplication([])
main_window = QtWidgets.QMainWindow()
main_window.show()
return app.exec()
if __name__ == "__main__":
import sys
sys.exit(main())
Workarounds
Moving the script definition(s) to either of [project.scripts] or [tool.poetry.scripts] makes the scripts available. However, in doing this, they are no longer GUI scripts.
Poetry Installation Method
pipx
Operating System
Windows 11
Poetry Version
2.1.3
Poetry Configuration
cache-dir = "C:\\Users\\martin.boisvert\\AppData\\Local\\pypoetry\\Cache"
data-dir = "C:\\Users\\martin.boisvert\\AppData\\Roaming\\pypoetry"
installer.max-workers = null
installer.no-binary = null
installer.only-binary = null
installer.parallel = true
installer.re-resolve = true
keyring.enabled = true
python.installation-dir = "{data-dir}\\python" # C:\Users\martin.boisvert\AppData\Roaming\pypoetry\python
requests.max-retries = 0
solver.lazy-wheel = true
system-git-client = false
virtualenvs.create = true
virtualenvs.in-project = null
virtualenvs.options.always-copy = false
virtualenvs.options.no-pip = false
virtualenvs.options.system-site-packages = false
virtualenvs.path = "{cache-dir}\\virtualenvs" # C:\Users\martin.boisvert\AppData\Local\pypoetry\Cache\virtualenvs
virtualenvs.prompt = "{project_name}-py{python_version}"
virtualenvs.use-poetry-python = false
Python Sysconfig
sysconfig.log
Platform: "win-amd64"
Python version: "3.13"
Current installation scheme: "venv"
Paths:
data = "C:\Users\martin.boisvert\AppData\Local\pypoetry\Cache\virtualenvs\poetry-gui-scripts-GiBywCFm-py3.13"
include = "C:\Python313\Include"
platinclude = "C:\Python313\Include"
platlib = "C:\Users\martin.boisvert\AppData\Local\pypoetry\Cache\virtualenvs\poetry-gui-scripts-GiBywCFm-py3.13\Lib\site-packages"
platstdlib = "C:\Users\martin.boisvert\AppData\Local\pypoetry\Cache\virtualenvs\poetry-gui-scripts-GiBywCFm-py3.13\Lib"
purelib = "C:\Users\martin.boisvert\AppData\Local\pypoetry\Cache\virtualenvs\poetry-gui-scripts-GiBywCFm-py3.13\Lib\site-packages"
scripts = "C:\Users\martin.boisvert\AppData\Local\pypoetry\Cache\virtualenvs\poetry-gui-scripts-GiBywCFm-py3.13\Scripts"
stdlib = "C:\Python313\Lib"
Variables:
BINDIR = "C:\Users\martin.boisvert\AppData\Local\pypoetry\Cache\virtualenvs\poetry-gui-scripts-GiBywCFm-py3.13\Scripts"
BINLIBDEST = "C:\Users\martin.boisvert\AppData\Local\pypoetry\Cache\virtualenvs\poetry-gui-scripts-GiBywCFm-py3.13\Lib"
EXE = ".exe"
EXT_SUFFIX = ".cp313-win_amd64.pyd"
INCLUDEPY = "C:\Python313\Include"
LDLIBRARY = "python313.dll"
LIBDEST = "C:\Python313\Lib"
LIBDIR = "C:\Python313\libs"
LIBRARY = "python313.dll"
Py_GIL_DISABLED = "0"
SOABI = "cp313-win_amd64"
TZPATH = ""
VERSION = "313"
VPATH = "..\.."
abi_thread = ""
abiflags = ""
base = "C:\Users\martin.boisvert\AppData\Local\pypoetry\Cache\virtualenvs\poetry-gui-scripts-GiBywCFm-py3.13"
exec_prefix = "C:\Users\martin.boisvert\AppData\Local\pypoetry\Cache\virtualenvs\poetry-gui-scripts-GiBywCFm-py3.13"
implementation = "Python"
implementation_lower = "python"
installed_base = "C:\Python313"
installed_platbase = "C:\Python313"
platbase = "C:\Users\martin.boisvert\AppData\Local\pypoetry\Cache\virtualenvs\poetry-gui-scripts-GiBywCFm-py3.13"
platlibdir = "DLLs"
prefix = "C:\Users\martin.boisvert\AppData\Local\pypoetry\Cache\virtualenvs\poetry-gui-scripts-GiBywCFm-py3.13"
projectbase = "C:\Python313"
py_version = "3.13.3"
py_version_nodot = "313"
py_version_nodot_plat = "313"
py_version_short = "3.13"
srcdir = "C:\Python313"
userbase = "C:\Users\martin.boisvert\AppData\Roaming\Python"
Example pyproject.toml
[project]
name = "poetry-gui-scripts"
version = "0.1.0"
description = ""
requires-python = ">=3.10,<3.14"
dependencies = ["PySide6~=6.9.0"]
[project.gui-scripts]
mygui = "poetry_gui_scripts.__main__:main"
[build-system]
requires = ["poetry-core>=2.0.0,<3.0.0"]
build-backend = "poetry.core.masonry.api"
Poetry Runtime Logs
poetry-runtime.log
C:\Work\Demos\poetry-gui-scripts
λ poetry -vvv run mygui
Loading configuration file C:\Users\martin.boisvert\AppData\Roaming\pypoetry\config.toml
Loading configuration file C:\Users\martin.boisvert\AppData\Roaming\pypoetry\auth.toml
[findpython:findpython] Running script: ['C:\\Python313\\python.EXE', '-EsSc', 'import sys; print(sys.executable)']
Found: C:\Python313\python.EXE
[findpython:findpython] Running script: ['C:\\Python313\\python.EXE', '-EsSc', 'import platform; print(platform.python_version())']
Using virtualenv: C:\Users\martin.boisvert\AppData\Local\pypoetry\Cache\virtualenvs\poetry-gui-scripts-GiBywCFm-py3.13
'mygui' is not recognized as an internal or external command,
operable program or batch file.
Description
https://python-poetry.org/docs/pyproject/#gui-scripts
However, on Windows, any GUI scripts defined here are not actually made available in the
<venv>\Scriptsfolder. So defining a gui-script named "mygui", runningpoetry install, and then runningmyguifrom the active venv orpoetry run myguifails with the following output:This only affects the virtual env, as GUI scripts defined here are properly included in the built wheel's
entry_points.txtwhen runningpoetry build.Here is a very simple GUI script to go along with the pyproject.toml further down:
Workarounds
Moving the script definition(s) to either of
[project.scripts]or[tool.poetry.scripts]makes the scripts available. However, in doing this, they are no longer GUI scripts.Poetry Installation Method
pipx
Operating System
Windows 11
Poetry Version
2.1.3
Poetry Configuration
Python Sysconfig
sysconfig.log
Example pyproject.toml
Poetry Runtime Logs
poetry-runtime.log