Release notes needed:
master branch.master branch.src/PIL/_version.pyCHANGES.rst.make release-test in a freshly cloned repo. $ git branch 6.0.x
$ git tag 6.0.0
$ git push --all
$ git push --tags
$ make sdist
twine upload dist/Pillow-6.0.0-*.dev0 to version identifier in src/PIL/_version.py@cgohlke for Windows binaries via release ticket e.g. https://github.com/python-pillow/Pillow/issues/1174.@cgohlke and twine upload *.bash
git clone https://github.com/python-pillow/pillow-wheels
cd pillow-wheels
./update-pillow-tag.sh 6.0.0
bash
wget -m -A 'Pillow-6.0.0*' \
http://a365fff413fe338398b6-1c8a9b3114517dc5fe17b7c3f8c63a43.r19.cf2.rackcdn.com
6.0.0 rather than latest e.g. https://pillow.readthedocs.io/en/6.0.x/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.
Most helpful comment
Thanks @cgohlke. Okay, Pillow 6.0.0 is released.