Skip to content

Unable to run uvx --python [3.9|3.10|3.11|3.12] textual-paint #9851

@BioGeek

Description

@BioGeek

I am unable to get uvx working with textual-paint .

I first tried uvx --python 3.9 textual-paint:

$ uvx --python 3.9 textual-paint
Installed 19 packages in 13ms
Traceback (most recent call last):
  File "/home/j-vangoey/.cache/uv/archive-v0/TkQdylBcXlZcpfEIv5uB1/bin/textual-paint", line 7, in <module>
    from textual_paint.paint import main
  File "/home/j-vangoey/.cache/uv/archive-v0/TkQdylBcXlZcpfEIv5uB1/lib/python3.9/site-packages/textual_paint/paint.py", line 35, in <module>
    from textual_paint.action import Action
  File "/home/j-vangoey/.cache/uv/archive-v0/TkQdylBcXlZcpfEIv5uB1/lib/python3.9/site-packages/textual_paint/action.py", line 5, in <module>
    from textual_paint.ansi_art_document import AnsiArtDocument
  File "/home/j-vangoey/.cache/uv/archive-v0/TkQdylBcXlZcpfEIv5uB1/lib/python3.9/site-packages/textual_paint/ansi_art_document.py", line 583
    match instruction.region:
          ^
SyntaxError: invalid syntax

After looking at the textual-paint source code I see in setyp.cfg: python_requires = >=3.10,<3.13. So preferably uvx should be able to parse that and return a warning that textual-paint is not compatible with python 3.9 instead of throwing a SyntaxError

Next up, uvx --python 3.10 textual-paint and uvx --python 3.11 textual-paint both fail with the same ModuleNotFoundError. This seems related to pyfiglet where I found a few related issues (pwaller/pyfiglet#113 pwaller/pyfiglet#124), but which should be fixed in v1.0.0 of pyfiglet.

$ uvx --python 3.10 textual-paint
Installed 19 packages in 31ms
Traceback (most recent call last):
  File "/home/j-vangoey/.cache/uv/archive-v0/R8oliKzRfOI5e7eVFwK9U/bin/textual-paint", line 7, in <module>
    from textual_paint.paint import main
  File "/home/j-vangoey/.cache/uv/archive-v0/R8oliKzRfOI5e7eVFwK9U/lib/python3.10/site-packages/textual_paint/paint.py", line 44, in <module>
    from textual_paint.canvas import Canvas
  File "/home/j-vangoey/.cache/uv/archive-v0/R8oliKzRfOI5e7eVFwK9U/lib/python3.10/site-packages/textual_paint/canvas.py", line 17, in <module>
    from textual_paint.meta_glyph_font import largest_font_that_fits
  File "/home/j-vangoey/.cache/uv/archive-v0/R8oliKzRfOI5e7eVFwK9U/lib/python3.10/site-packages/textual_paint/meta_glyph_font.py", line 5, in <module>
    from pyfiglet import Figlet, FigletFont  # type: ignore
  File "/home/j-vangoey/.cache/uv/archive-v0/R8oliKzRfOI5e7eVFwK9U/lib/python3.10/site-packages/pyfiglet/__init__.py", line 11, in <module>
    import pkg_resources
ModuleNotFoundError: No module named 'pkg_resources'
$ uvx --python 3.11 textual-paint
Installed 19 packages in 16ms
Traceback (most recent call last):
  File "/home/j-vangoey/.cache/uv/archive-v0/7odsptFFgOts7-Yke6ZXO/bin/textual-paint", line 7, in <module>
    from textual_paint.paint import main
  File "/home/j-vangoey/.cache/uv/archive-v0/7odsptFFgOts7-Yke6ZXO/lib/python3.11/site-packages/textual_paint/paint.py", line 44, in <module>
    from textual_paint.canvas import Canvas
  File "/home/j-vangoey/.cache/uv/archive-v0/7odsptFFgOts7-Yke6ZXO/lib/python3.11/site-packages/textual_paint/canvas.py", line 17, in <module>
    from textual_paint.meta_glyph_font import largest_font_that_fits
  File "/home/j-vangoey/.cache/uv/archive-v0/7odsptFFgOts7-Yke6ZXO/lib/python3.11/site-packages/textual_paint/meta_glyph_font.py", line 5, in <module>
    from pyfiglet import Figlet, FigletFont  # type: ignore
    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/j-vangoey/.cache/uv/archive-v0/7odsptFFgOts7-Yke6ZXO/lib/python3.11/site-packages/pyfiglet/__init__.py", line 11, in <module>
    import pkg_resources
ModuleNotFoundError: No module named 'pkg_resources'

And finally uvx --python 3.12 textual-paint had a problem with installing Pillow

$ uvx --python 3.12 textual-paint
   Built pyperclip==1.8.2
  × Failed to download and build `pillow==9.5.0`
  ╰─▶ Build backend failed to build wheel through `build_wheel` (exit status: 1)

      [stdout]
      running bdist_wheel
      running build
      running build_py
      creating build/lib.linux-x86_64-cpython-312/PIL
      copying src/PIL/features.py -> build/lib.linux-x86_64-cpython-312/PIL
      copying src/PIL/ExifTags.py -> build/lib.linux-x86_64-cpython-312/PIL
      copying src/PIL/BufrStubImagePlugin.py -> build/lib.linux-x86_64-cpython-312/PIL
      copying src/PIL/Hdf5StubImagePlugin.py -> build/lib.linux-x86_64-cpython-312/PIL
      copying src/PIL/QoiImagePlugin.py -> build/lib.linux-x86_64-cpython-312/PIL
      copying src/PIL/_util.py -> build/lib.linux-x86_64-cpython-312/PIL
      copying src/PIL/TiffTags.py -> build/lib.linux-x86_64-cpython-312/PIL
      copying src/PIL/WmfImagePlugin.py -> build/lib.linux-x86_64-cpython-312/PIL
      copying src/PIL/ImageOps.py -> build/lib.linux-x86_64-cpython-312/PIL
      copying src/PIL/PcfFontFile.py -> build/lib.linux-x86_64-cpython-312/PIL
      copying src/PIL/ImageStat.py -> build/lib.linux-x86_64-cpython-312/PIL
      copying src/PIL/Image.py -> build/lib.linux-x86_64-cpython-312/PIL
      copying src/PIL/ImageFile.py -> build/lib.linux-x86_64-cpython-312/PIL
      copying src/PIL/_version.py -> build/lib.linux-x86_64-cpython-312/PIL
      copying src/PIL/JpegImagePlugin.py -> build/lib.linux-x86_64-cpython-312/PIL
      copying src/PIL/EpsImagePlugin.py -> build/lib.linux-x86_64-cpython-312/PIL
      copying src/PIL/IptcImagePlugin.py -> build/lib.linux-x86_64-cpython-312/PIL
      copying src/PIL/DdsImagePlugin.py -> build/lib.linux-x86_64-cpython-312/PIL
      copying src/PIL/CurImagePlugin.py -> build/lib.linux-x86_64-cpython-312/PIL
      copying src/PIL/GbrImagePlugin.py -> build/lib.linux-x86_64-cpython-312/PIL
      copying src/PIL/_binary.py -> build/lib.linux-x86_64-cpython-312/PIL
      copying src/PIL/ImageMorph.py -> build/lib.linux-x86_64-cpython-312/PIL
      copying src/PIL/PngImagePlugin.py -> build/lib.linux-x86_64-cpython-312/PIL
      copying src/PIL/PdfParser.py -> build/lib.linux-x86_64-cpython-312/PIL
      copying src/PIL/BdfFontFile.py -> build/lib.linux-x86_64-cpython-312/PIL
      copying src/PIL/ImageMode.py -> build/lib.linux-x86_64-cpython-312/PIL
      copying src/PIL/FpxImagePlugin.py -> build/lib.linux-x86_64-cpython-312/PIL
      copying src/PIL/__init__.py -> build/lib.linux-x86_64-cpython-312/PIL
      copying src/PIL/PcxImagePlugin.py -> build/lib.linux-x86_64-cpython-312/PIL
      copying src/PIL/ImageFont.py -> build/lib.linux-x86_64-cpython-312/PIL
      copying src/PIL/ImageShow.py -> build/lib.linux-x86_64-cpython-312/PIL
      copying src/PIL/PixarImagePlugin.py -> build/lib.linux-x86_64-cpython-312/PIL
      copying src/PIL/ImageTk.py -> build/lib.linux-x86_64-cpython-312/PIL
      copying src/PIL/ImagePalette.py -> build/lib.linux-x86_64-cpython-312/PIL
      copying src/PIL/SgiImagePlugin.py -> build/lib.linux-x86_64-cpython-312/PIL
      copying src/PIL/BlpImagePlugin.py -> build/lib.linux-x86_64-cpython-312/PIL
      copying src/PIL/_tkinter_finder.py -> build/lib.linux-x86_64-cpython-312/PIL
      copying src/PIL/FliImagePlugin.py -> build/lib.linux-x86_64-cpython-312/PIL
      copying src/PIL/FontFile.py -> build/lib.linux-x86_64-cpython-312/PIL
      copying src/PIL/PsdImagePlugin.py -> build/lib.linux-x86_64-cpython-312/PIL
      copying src/PIL/GdImageFile.py -> build/lib.linux-x86_64-cpython-312/PIL
      copying src/PIL/BmpImagePlugin.py -> build/lib.linux-x86_64-cpython-312/PIL
      copying src/PIL/ImageMath.py -> build/lib.linux-x86_64-cpython-312/PIL
      copying src/PIL/ImageCms.py -> build/lib.linux-x86_64-cpython-312/PIL
      copying src/PIL/PaletteFile.py -> build/lib.linux-x86_64-cpython-312/PIL
      copying src/PIL/ImageColor.py -> build/lib.linux-x86_64-cpython-312/PIL
      copying src/PIL/XbmImagePlugin.py -> build/lib.linux-x86_64-cpython-312/PIL
      copying src/PIL/ImageGrab.py -> build/lib.linux-x86_64-cpython-312/PIL
      copying src/PIL/ImtImagePlugin.py -> build/lib.linux-x86_64-cpython-312/PIL
      copying src/PIL/TiffImagePlugin.py -> build/lib.linux-x86_64-cpython-312/PIL
      copying src/PIL/ImageEnhance.py -> build/lib.linux-x86_64-cpython-312/PIL
      copying src/PIL/SunImagePlugin.py -> build/lib.linux-x86_64-cpython-312/PIL
      copying src/PIL/ImageTransform.py -> build/lib.linux-x86_64-cpython-312/PIL
      copying src/PIL/ImageDraw2.py -> build/lib.linux-x86_64-cpython-312/PIL
      copying src/PIL/PalmImagePlugin.py -> build/lib.linux-x86_64-cpython-312/PIL
      copying src/PIL/TarIO.py -> build/lib.linux-x86_64-cpython-312/PIL
      copying src/PIL/IcoImagePlugin.py -> build/lib.linux-x86_64-cpython-312/PIL
      copying src/PIL/Jpeg2KImagePlugin.py -> build/lib.linux-x86_64-cpython-312/PIL
      copying src/PIL/PSDraw.py -> build/lib.linux-x86_64-cpython-312/PIL
      copying src/PIL/PyAccess.py -> build/lib.linux-x86_64-cpython-312/PIL
      copying src/PIL/PdfImagePlugin.py -> build/lib.linux-x86_64-cpython-312/PIL
      copying src/PIL/MpoImagePlugin.py -> build/lib.linux-x86_64-cpython-312/PIL
      copying src/PIL/SpiderImagePlugin.py -> build/lib.linux-x86_64-cpython-312/PIL
      copying src/PIL/XVThumbImagePlugin.py -> build/lib.linux-x86_64-cpython-312/PIL
      copying src/PIL/ImageWin.py -> build/lib.linux-x86_64-cpython-312/PIL
      copying src/PIL/IcnsImagePlugin.py -> build/lib.linux-x86_64-cpython-312/PIL
      copying src/PIL/FtexImagePlugin.py -> build/lib.linux-x86_64-cpython-312/PIL
      copying src/PIL/GifImagePlugin.py -> build/lib.linux-x86_64-cpython-312/PIL
      copying src/PIL/WebPImagePlugin.py -> build/lib.linux-x86_64-cpython-312/PIL
      copying src/PIL/JpegPresets.py -> build/lib.linux-x86_64-cpython-312/PIL
      copying src/PIL/FitsImagePlugin.py -> build/lib.linux-x86_64-cpython-312/PIL
      copying src/PIL/ImagePath.py -> build/lib.linux-x86_64-cpython-312/PIL
      copying src/PIL/WalImageFile.py -> build/lib.linux-x86_64-cpython-312/PIL
      copying src/PIL/XpmImagePlugin.py -> build/lib.linux-x86_64-cpython-312/PIL
      copying src/PIL/MicImagePlugin.py -> build/lib.linux-x86_64-cpython-312/PIL
      copying src/PIL/ImageQt.py -> build/lib.linux-x86_64-cpython-312/PIL
      copying src/PIL/McIdasImagePlugin.py -> build/lib.linux-x86_64-cpython-312/PIL
      copying src/PIL/_deprecate.py -> build/lib.linux-x86_64-cpython-312/PIL
      copying src/PIL/MspImagePlugin.py -> build/lib.linux-x86_64-cpython-312/PIL
      copying src/PIL/PpmImagePlugin.py -> build/lib.linux-x86_64-cpython-312/PIL
      copying src/PIL/ImageSequence.py -> build/lib.linux-x86_64-cpython-312/PIL
      copying src/PIL/ImageChops.py -> build/lib.linux-x86_64-cpython-312/PIL
      copying src/PIL/FitsStubImagePlugin.py -> build/lib.linux-x86_64-cpython-312/PIL
      copying src/PIL/__main__.py -> build/lib.linux-x86_64-cpython-312/PIL
      copying src/PIL/ImageFilter.py -> build/lib.linux-x86_64-cpython-312/PIL
      copying src/PIL/GimpGradientFile.py -> build/lib.linux-x86_64-cpython-312/PIL
      copying src/PIL/TgaImagePlugin.py -> build/lib.linux-x86_64-cpython-312/PIL
      copying src/PIL/GribStubImagePlugin.py -> build/lib.linux-x86_64-cpython-312/PIL
      copying src/PIL/PcdImagePlugin.py -> build/lib.linux-x86_64-cpython-312/PIL
      copying src/PIL/ImImagePlugin.py -> build/lib.linux-x86_64-cpython-312/PIL
      copying src/PIL/MpegImagePlugin.py -> build/lib.linux-x86_64-cpython-312/PIL
      copying src/PIL/ContainerIO.py -> build/lib.linux-x86_64-cpython-312/PIL
      copying src/PIL/DcxImagePlugin.py -> build/lib.linux-x86_64-cpython-312/PIL
      copying src/PIL/ImageDraw.py -> build/lib.linux-x86_64-cpython-312/PIL
      copying src/PIL/GimpPaletteFile.py -> build/lib.linux-x86_64-cpython-312/PIL
      running egg_info
      writing src/Pillow.egg-info/PKG-INFO
      writing dependency_links to src/Pillow.egg-info/dependency_links.txt
      writing requirements to src/Pillow.egg-info/requires.txt
      writing top-level names to src/Pillow.egg-info/top_level.txt
      reading manifest file 'src/Pillow.egg-info/SOURCES.txt'
      reading manifest template 'MANIFEST.in'
      adding license file 'LICENSE'
      writing manifest file 'src/Pillow.egg-info/SOURCES.txt'
      running build_ext

      [stderr]
      warning: no files found matching '*.c'
      warning: no files found matching '*.h'
      warning: no files found matching '*.sh'
      warning: no files found matching '*.txt'
      warning: no previously-included files found matching '.appveyor.yml'
      warning: no previously-included files found matching '.clang-format'
      warning: no previously-included files found matching '.coveragerc'
      warning: no previously-included files found matching '.editorconfig'
      warning: no previously-included files found matching '.readthedocs.yml'
      warning: no previously-included files found matching 'codecov.yml'
      warning: no previously-included files found matching 'renovate.json'
      warning: no previously-included files matching '.git*' found anywhere in distribution
      warning: no previously-included files matching '*.pyc' found anywhere in distribution
      warning: no previously-included files matching '*.so' found anywhere in distribution
      no previously-included directories found matching '.ci'


      The headers or library files could not be found for jpeg,
      a required dependency when compiling Pillow from source.

      Please see the install instructions at:
         https://pillow.readthedocs.io/en/latest/installation.html

      Traceback (most recent call last):
        File "<string>", line 993, in <module>
        File "/home/j-vangoey/.cache/uv/builds-v0/.tmpaZdtRn/lib/python3.12/site-packages/setuptools/__init__.py", line 117, in setup
          return distutils.core.setup(**attrs)
                 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
        File "/home/j-vangoey/.cache/uv/builds-v0/.tmpaZdtRn/lib/python3.12/site-packages/setuptools/_distutils/core.py", line 183, in setup
          return run_commands(dist)
                 ^^^^^^^^^^^^^^^^^^
        File "/home/j-vangoey/.cache/uv/builds-v0/.tmpaZdtRn/lib/python3.12/site-packages/setuptools/_distutils/core.py", line 199, in run_commands
          dist.run_commands()
        File "/home/j-vangoey/.cache/uv/builds-v0/.tmpaZdtRn/lib/python3.12/site-packages/setuptools/_distutils/dist.py", line 954, in run_commands
          self.run_command(cmd)
        File "/home/j-vangoey/.cache/uv/builds-v0/.tmpaZdtRn/lib/python3.12/site-packages/setuptools/dist.py", line 995, in run_command
          super().run_command(command)
        File "/home/j-vangoey/.cache/uv/builds-v0/.tmpaZdtRn/lib/python3.12/site-packages/setuptools/_distutils/dist.py", line 973, in run_command
          cmd_obj.run()
        File "/home/j-vangoey/.cache/uv/builds-v0/.tmpaZdtRn/lib/python3.12/site-packages/setuptools/command/bdist_wheel.py", line 381, in run
          self.run_command("build")
        File "/home/j-vangoey/.cache/uv/builds-v0/.tmpaZdtRn/lib/python3.12/site-packages/setuptools/_distutils/cmd.py", line 316, in run_command
          self.distribution.run_command(command)
        File "/home/j-vangoey/.cache/uv/builds-v0/.tmpaZdtRn/lib/python3.12/site-packages/setuptools/dist.py", line 995, in run_command
          super().run_command(command)
        File "/home/j-vangoey/.cache/uv/builds-v0/.tmpaZdtRn/lib/python3.12/site-packages/setuptools/_distutils/dist.py", line 973, in run_command
          cmd_obj.run()
        File "/home/j-vangoey/.cache/uv/builds-v0/.tmpaZdtRn/lib/python3.12/site-packages/setuptools/_distutils/command/build.py", line 135, in run
          self.run_command(cmd_name)
        File "/home/j-vangoey/.cache/uv/builds-v0/.tmpaZdtRn/lib/python3.12/site-packages/setuptools/_distutils/cmd.py", line 316, in run_command
          self.distribution.run_command(command)
        File "/home/j-vangoey/.cache/uv/builds-v0/.tmpaZdtRn/lib/python3.12/site-packages/setuptools/dist.py", line 995, in run_command
          super().run_command(command)
        File "/home/j-vangoey/.cache/uv/builds-v0/.tmpaZdtRn/lib/python3.12/site-packages/setuptools/_distutils/dist.py", line 973, in run_command
          cmd_obj.run()
        File "/home/j-vangoey/.cache/uv/builds-v0/.tmpaZdtRn/lib/python3.12/site-packages/setuptools/command/build_ext.py", line 99, in run
          _build_ext.run(self)
        File "/home/j-vangoey/.cache/uv/builds-v0/.tmpaZdtRn/lib/python3.12/site-packages/setuptools/_distutils/command/build_ext.py", line 359, in run
          self.build_extensions()
        File "<string>", line 809, in build_extensions
      RequiredDependencyException: jpeg

      During handling of the above exception, another exception occurred:

      Traceback (most recent call last):
        File "<string>", line 11, in <module>
        File "/home/j-vangoey/.cache/uv/builds-v0/.tmpaZdtRn/lib/python3.12/site-packages/setuptools/build_meta.py", line 435, in build_wheel
          return _build(['bdist_wheel'])
                 ^^^^^^^^^^^^^^^^^^^^^^^
        File "/home/j-vangoey/.cache/uv/builds-v0/.tmpaZdtRn/lib/python3.12/site-packages/setuptools/build_meta.py", line 426, in _build
          return self._build_with_temp_dir(
                 ^^^^^^^^^^^^^^^^^^^^^^^^^^
        File "/home/j-vangoey/.cache/uv/builds-v0/.tmpaZdtRn/lib/python3.12/site-packages/setuptools/build_meta.py", line 407, in _build_with_temp_dir
          self.run_setup()
        File "/home/j-vangoey/.cache/uv/builds-v0/.tmpaZdtRn/lib/python3.12/site-packages/setuptools/build_meta.py", line 522, in run_setup
          super().run_setup(setup_script=setup_script)
        File "/home/j-vangoey/.cache/uv/builds-v0/.tmpaZdtRn/lib/python3.12/site-packages/setuptools/build_meta.py", line 320, in run_setup
          exec(code, locals())
        File "<string>", line 1010, in <module>
      RequiredDependencyException:

      The headers or library files could not be found for jpeg,
      a required dependency when compiling Pillow from source.

      Please see the install instructions at:
         https://pillow.readthedocs.io/en/latest/installation.html



  help: `pillow` (v9.5.0) was included because `textual-paint` (v0.4.0) depends on `pillow`

System info:

OS: Ubuntu 22.04.4 LTS x86_64
uv version: 0.5.6

Metadata

Metadata

Assignees

No one assigned

    Labels

    questionAsking for clarification or support

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions