Pillow: Release Pillow 6.0.0 on April 1, 2019

Created on 28 Jan 2019  Â·  15Comments  Â·  Source: python-pillow/Pillow

Release notes needed:

  • [x] #3555
  • [x] #3563?
    #3632?
  • [x] #3688

Main release checklist

  • [x] Open a release ticket
  • [x] Develop and prepare release in master branch.
  • [x] Check Travis CI and AppVeyor CI to confirm passing tests in master branch.
  • [x] Check that all of the wheel builds Pillow Wheel Builder pass the tests in Travis CI.
  • [x] In compliance with PEP 440, update version identifier in src/PIL/_version.py
  • [x] Update CHANGES.rst.
  • [x] Run pre-release check via make release-test in a freshly cloned repo.
  • [x] Create branch and tag for release e.g.:
    $ git branch 6.0.x
    $ git tag 6.0.0
    $ git push --all
    $ git push --tags
  • [x] Create source distributions e.g.:
    $ make sdist
  • [x] Create binary distributions
  • [x] Upload all binaries and source distributions e.g. twine upload dist/Pillow-6.0.0-*
  • [x] Create a new release on GitHub
  • [x] In compliance with PEP 440, append .dev0 to version identifier in src/PIL/_version.py

Binary Distributions

Windows

Mac and Linux

  • [x] Use the Pillow Wheel Builder:
    bash git clone https://github.com/python-pillow/pillow-wheels cd pillow-wheels ./update-pillow-tag.sh 6.0.0
  • [x] Download distributions from the Pillow Wheel Builder container.
    bash wget -m -A 'Pillow-6.0.0*' \ http://a365fff413fe338398b6-1c8a9b3114517dc5fe17b7c3f8c63a43.r19.cf2.rackcdn.com

Publicize Release

Documentation

Release

Most helpful comment

Thanks @cgohlke. Okay, Pillow 6.0.0 is released.

All 15 comments

  • I've created PR #3742 for with release notes for #3555 and #3688.
  • Regarding #3563, I've created #3741 as an update for this, so I'd like to see if that is merged before writing release notes.
  • I don't think that #3632 needs release notes, as that's a minor internal speedup, with no other change for users.

Almost time for Pillow 6!! 🎉

Okay, @cgohlke, if you would be able to create Windows binaries?

I do get a reproducible access violation fault on Python 3.x, e.g.:

================================================= test session starts =================================================
platform win32 -- Python 3.6.8, pytest-4.4.0, py-1.8.0, pluggy-0.9.0 -- X:\Python36\python.exe
cachedir: .pytest_cache
hypothesis profile 'default' -> database=DirectoryBasedExampleDatabase('D:\\Build\\Pillow\\Pillow-6.0.0\\.hypothesis\\examples')
rootdir: D:\Build\Pillow\Pillow-6.0.0
plugins: xdist-1.27.0, pep8-1.0.6, forked-1.0.2, faulthandler-1.5.0, cov-2.6.1, palladium-1.2.1.1, hypothesis-4.14.0
collected 1316 items

Tests/test_000_sanity.py::TestSanity::test_sanity PASSED                                                         [  0%]
Tests/test_binary.py::TestBinary::test_big_endian PASSED                                                         [  0%]
<snip>
Tests/test_image_convert.py::TestImageConvert::test_rgba_p PASSED                                                [ 54%]
Tests/test_image_convert.py::TestImageConvert::test_sanity Windows fatal exception: access violation

Current thread 0x0000470c (most recent call first):
  File "X:\Python36\lib\site-packages\PIL\Image.py", line 1027 in convert
  File "D:\Build\Pillow\Pillow-6.0.0\Tests\test_image_convert.py", line 11 in convert
  File "D:\Build\Pillow\Pillow-6.0.0\Tests\test_image_convert.py", line 21 in test_sanity
  File "X:\Python36\lib\unittest\case.py", line 605 in run
  File "D:\Build\Pillow\Pillow-6.0.0\Tests\helper.py", line 58 in run
  File "X:\Python36\lib\unittest\case.py", line 653 in __call__
  File "X:\Python36\lib\site-packages\_pytest\unittest.py", line 221 in runtest
  File "X:\Python36\lib\site-packages\_pytest\runner.py", line 123 in pytest_runtest_call
  File "X:\Python36\lib\site-packages\pluggy\callers.py", line 187 in _multicall
  File "X:\Python36\lib\site-packages\pluggy\manager.py", line 62 in <lambda>
  File "X:\Python36\lib\site-packages\pluggy\manager.py", line 68 in _hookexec
  File "X:\Python36\lib\site-packages\pluggy\hooks.py", line 289 in __call__
  File "X:\Python36\lib\site-packages\_pytest\runner.py", line 198 in <lambda>
  File "X:\Python36\lib\site-packages\_pytest\runner.py", line 226 in from_call
  File "X:\Python36\lib\site-packages\_pytest\runner.py", line 198 in call_runtest_hook
  File "X:\Python36\lib\site-packages\_pytest\runner.py", line 173 in call_and_report
  File "X:\Python36\lib\site-packages\_pytest\runner.py", line 93 in runtestprotocol
  File "X:\Python36\lib\site-packages\_pytest\runner.py", line 78 in pytest_runtest_protocol
  File "X:\Python36\lib\site-packages\pluggy\callers.py", line 187 in _multicall
  File "X:\Python36\lib\site-packages\pluggy\manager.py", line 62 in <lambda>
  File "X:\Python36\lib\site-packages\pluggy\manager.py", line 68 in _hookexec
  File "X:\Python36\lib\site-packages\pluggy\hooks.py", line 289 in __call__
  File "X:\Python36\lib\site-packages\_pytest\main.py", line 270 in pytest_runtestloop
  File "X:\Python36\lib\site-packages\pluggy\callers.py", line 187 in _multicall
  File "X:\Python36\lib\site-packages\pluggy\manager.py", line 62 in <lambda>
  File "X:\Python36\lib\site-packages\pluggy\manager.py", line 68 in _hookexec
  File "X:\Python36\lib\site-packages\pluggy\hooks.py", line 289 in __call__
  File "X:\Python36\lib\site-packages\_pytest\main.py", line 249 in _main
  File "X:\Python36\lib\site-packages\_pytest\main.py", line 209 in wrap_session
  File "X:\Python36\lib\site-packages\_pytest\main.py", line 242 in pytest_cmdline_main
  File "X:\Python36\lib\site-packages\pluggy\callers.py", line 187 in _multicall
  File "X:\Python36\lib\site-packages\pluggy\manager.py", line 62 in <lambda>
  File "X:\Python36\lib\site-packages\pluggy\manager.py", line 68 in _hookexec
  File "X:\Python36\lib\site-packages\pluggy\hooks.py", line 289 in __call__
  File "X:\Python36\lib\site-packages\_pytest\config\__init__.py", line 79 in main
  File "X:\Python36\lib\site-packages\pytest.py", line 89 in <module>
  File "X:\Python36\lib\runpy.py", line 85 in _run_code
  File "X:\Python36\lib\runpy.py", line 193 in _run_module_as_main

test_sanity passes when removing the "PA" mode from the matrix.

Then there's another segfault later:

Tests/test_qt_image_fromqpixmap.py::TestFromQPixmap::test_sanity_1 PASSED                                                   [ 98%]
Tests/test_qt_image_fromqpixmap.py::TestFromQPixmap::test_sanity_l PASSED                                                   [ 98%]
Tests/test_qt_image_fromqpixmap.py::TestFromQPixmap::test_sanity_p PASSED                                                   [ 98%]
Tests/test_qt_image_fromqpixmap.py::TestFromQPixmap::test_sanity_rgb PASSED                                                 [ 98%]
Tests/test_qt_image_fromqpixmap.py::TestFromQPixmap::test_sanity_rgba PASSED                                                [ 98%]Windows fatal exception: access violation

Current thread 0x00004344 (most recent call first):
  File "X:\Python37\lib\site-packages\_pytest\runner.py", line 305 in _callfinalizers
  File "X:\Python37\lib\site-packages\_pytest\runner.py", line 315 in _teardown_with_finalization
  File "X:\Python37\lib\site-packages\_pytest\runner.py", line 297 in _pop_and_teardown
  File "X:\Python37\lib\site-packages\_pytest\runner.py", line 340 in _teardown_towards
  File "X:\Python37\lib\site-packages\_pytest\runner.py", line 332 in teardown_exact
  File "X:\Python37\lib\site-packages\_pytest\runner.py", line 137 in pytest_runtest_teardown
  File "X:\Python37\lib\site-packages\pluggy\callers.py", line 187 in _multicall
  File "X:\Python37\lib\site-packages\pluggy\manager.py", line 62 in <lambda>
  File "X:\Python37\lib\site-packages\pluggy\manager.py", line 68 in _hookexec
  File "X:\Python37\lib\site-packages\pluggy\hooks.py", line 289 in __call__
  File "X:\Python37\lib\site-packages\_pytest\runner.py", line 198 in <lambda>
  File "X:\Python37\lib\site-packages\_pytest\runner.py", line 226 in from_call
  File "X:\Python37\lib\site-packages\_pytest\runner.py", line 198 in call_runtest_hook
  File "X:\Python37\lib\site-packages\_pytest\runner.py", line 173 in call_and_report
  File "X:\Python37\lib\site-packages\_pytest\runner.py", line 94 in runtestprotocol
  File "X:\Python37\lib\site-packages\_pytest\runner.py", line 78 in pytest_runtest_protocol
  File "X:\Python37\lib\site-packages\pluggy\callers.py", line 187 in _multicall
  File "X:\Python37\lib\site-packages\pluggy\manager.py", line 62 in <lambda>
  File "X:\Python37\lib\site-packages\pluggy\manager.py", line 68 in _hookexec
  File "X:\Python37\lib\site-packages\pluggy\hooks.py", line 289 in __call__
  File "X:\Python37\lib\site-packages\_pytest\main.py", line 270 in pytest_runtestloop
  File "X:\Python37\lib\site-packages\pluggy\callers.py", line 187 in _multicall
  File "X:\Python37\lib\site-packages\pluggy\manager.py", line 62 in <lambda>
  File "X:\Python37\lib\site-packages\pluggy\manager.py", line 68 in _hookexec
  File "X:\Python37\lib\site-packages\pluggy\hooks.py", line 289 in __call__
  File "X:\Python37\lib\site-packages\_pytest\main.py", line 249 in _main
  File "X:\Python37\lib\site-packages\_pytest\main.py", line 209 in wrap_session
  File "X:\Python37\lib\site-packages\_pytest\main.py", line 242 in pytest_cmdline_main
  File "X:\Python37\lib\site-packages\pluggy\callers.py", line 187 in _multicall
  File "X:\Python37\lib\site-packages\pluggy\manager.py", line 62 in <lambda>
  File "X:\Python37\lib\site-packages\pluggy\manager.py", line 68 in _hookexec
  File "X:\Python37\lib\site-packages\pluggy\hooks.py", line 289 in __call__
  File "X:\Python37\lib\site-packages\_pytest\config\__init__.py", line 79 in main
  File "X:\Python37\lib\site-packages\pytest.py", line 89 in <module>
  File "X:\Python37\lib\runpy.py", line 85 in _run_code
  File "X:\Python37\lib\runpy.py", line 193 in _run_module_as_main

Any ideas why these aren't showing up on AppVeyor?

Any ideas why these aren't showing up on AppVeyor?

I have heap verification enabled and Qt installed during testing.

The conversion P -> PA crashes at Convert.c#L986. I have not noticed this before because this is relatively recent code added in https://github.com/python-pillow/Pillow/pull/3728.

>   _imaging.cp37-win_amd64.pyd!p2pa(unsigned char * out=0x000001682941db80, const unsigned char * in=0x000001682938a000, int xsize=128, const unsigned char * palette=0x000001682938bbe7) Line 986 C
    _imaging.cp37-win_amd64.pyd!frompalette(ImagingMemoryInstance * imOut=0x0000016829405fa0, ImagingMemoryInstance * imIn=0x000001682937dfa0, const char * mode=0x000001682745bd80) Line 1179  C
    _imaging.cp37-win_amd64.pyd!convert(ImagingMemoryInstance * imOut=0x0000000000000000, ImagingMemoryInstance * imIn=0x000001682937dfa0, const char * mode=0x000001682745bd80, ImagingPaletteInstance * palette=0x0000000000000000, int dither=3) Line 1467   C
    _imaging.cp37-win_amd64.pyd!ImagingConvert(ImagingMemoryInstance * imIn=0x000001682937dfa0, const char * mode=0x000001682745bd80, ImagingPaletteInstance * palette=0x0000000000000000, int dither=3) Line 1517  C
    _imaging.cp37-win_amd64.pyd!_convert(ImagingObject * self=0x0000016829679fd0, _object * args=0x00000168296d90c8) Line 921   C
    python37.dll!_PyMethodDef_RawFastCallKeywords(PyMethodDef * method=0x0000000000000000, _object * self=0x0000016829679fd0, _object * const * args=0x0000016828dedfb0, __int64 nargs=2, _object * kwnames) Line 694   C
    [Inline Frame] python37.dll!_PyMethodDescr_FastCallKeywords(_object *) Line 288 C
    python37.dll!call_function(_object * * * pp_stack=0x00000022087eeff8, __int64 oparg, _object * kwnames=0x0000000000000000) Line 4593    C
    python37.dll!_PyEval_EvalFrameDefault(_frame * f=0x0000016828dedda8, int throwflag=694656976) Line 3111 C
    [Inline Frame] python37.dll!PyEval_EvalFrameEx(_frame *) Line 547   C
  | Name | Value | Type
-- | -- | -- | --
â—¢ | in | 0x000001682938a000 <Error reading characters of string.> | const unsigned char *
  |   | <Unable to read memory> | const unsigned char
◢ | out | 0x000001682941db80 "ÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀ... | unsigned char *
  |   | 192 'À' | unsigned char
â—¢ | palette | 0x000001682938bbe7 "" | const unsigned char *
  |   | 0 '\0' | const unsigned char
◢ | rgba | 0x000001682938bcbb "333ÿf33ÿ™33ÿÌ33ÿÿ33ÿ" | const unsigned char *
  |   | 51 '3' | const unsigned char
  | x | 96 | int
  | xsize | 128 | int

@cgohlke could you try https://github.com/python-pillow/Pillow/tree/segfault and see if that fixes those two problems?

could you try https://github.com/python-pillow/Pillow/tree/segfault and see if that fixes those two problems?

Thanks. That works. All tests pass.

Excellent, thanks. That commit is now part of the release, so if you would be so kind as to generate the binaries again?

Thanks @cgohlke. Okay, Pillow 6.0.0 is released.

Thanks both!

We should also get heap verification and Qt on a Windows builds to detect these things earlier.

Great work all, thank you!!

New Pillow 6.0.0 leads to AttributeError on our test environment with Python 3.4.1

See

I see, Python 3.4 support was dropped with this release.

Was this page helpful?
0 / 5 - 0 ratings

Related issues

thinrhino picture thinrhino  Â·  3Comments

HansHirse picture HansHirse  Â·  3Comments

edowson picture edowson  Â·  3Comments

boskicthebrain picture boskicthebrain  Â·  4Comments

readyready15728 picture readyready15728  Â·  4Comments