Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Release Pillow 6.0.0 on April 1, 2019 #3618

Closed
22 tasks done
radarhere opened this issue Jan 28, 2019 · 15 comments
Closed
22 tasks done

Release Pillow 6.0.0 on April 1, 2019 #3618

radarhere opened this issue Jan 28, 2019 · 15 comments
Assignees
Labels
Milestone

Comments

@radarhere
Copy link
Member

radarhere commented Jan 28, 2019

Release notes needed:

Main release checklist

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

Binary Distributions

Windows

Mac and Linux

  git clone https://github.com/python-pillow/pillow-wheels
  cd pillow-wheels
  ./update-pillow-tag.sh 6.0.0
  wget -m -A 'Pillow-6.0.0*' \
  http://a365fff413fe338398b6-1c8a9b3114517dc5fe17b7c3f8c63a43.r19.cf2.rackcdn.com

Publicize Release

Documentation

@radarhere
Copy link
Member Author

@aclark4life
Copy link
Member

Almost time for Pillow 6!! 🎉

@radarhere
Copy link
Member Author

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

@cgohlke
Copy link
Contributor

cgohlke commented Apr 1, 2019

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

@cgohlke
Copy link
Contributor

cgohlke commented Apr 1, 2019

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

@hugovk
Copy link
Member

hugovk commented Apr 1, 2019

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

@cgohlke
Copy link
Contributor

cgohlke commented Apr 1, 2019

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

I have heap verification enabled and Qt installed during testing.

@cgohlke
Copy link
Contributor

cgohlke commented Apr 1, 2019

The conversion P -> PA crashes at Convert.c#L986. I have not noticed this before because this is relatively recent code added in #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

@radarhere
Copy link
Member Author

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

@cgohlke
Copy link
Contributor

cgohlke commented Apr 2, 2019

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.

@radarhere
Copy link
Member Author

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

@radarhere
Copy link
Member Author

Thanks @cgohlke. Okay, Pillow 6.0.0 is released.

@hugovk
Copy link
Member

hugovk commented Apr 2, 2019

Thanks both!

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

@aclark4life
Copy link
Member

Great work all, thank you!!

@xqt
Copy link

xqt commented Apr 4, 2019

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.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Projects
None yet
Development

No branches or pull requests

5 participants