uv icon indicating copy to clipboard operation
uv copied to clipboard

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

Open BioGeek opened this issue 2 months ago • 1 comments

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 (https://github.com/pwaller/pyfiglet/issues/113 https://github.com/pwaller/pyfiglet/issues/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

BioGeek avatar Dec 12 '24 20:12 BioGeek