On behalf of the Python development community, I'm chuffed to announce
the availability of Python 3.5.8rc1.
Python 3.5 is in "security fixes only" mode. This new version only
contains security fixes, not conventional bug fixes, and it is a
You can find Python 3.5.8rc1 here:
I think Python 3.5 may just barely outlive 2.7,
I dislike having to do that, but I had to make a last minute change in
my PEP 587 "Python Initialization Configuration" to allow to modify
the structure in the future without breaking the backward
compatibility. I added a "struct_size" field to PyPreConfig and
PyStatus status = PyConfig_InitPythonConfig(&config);
must now be written:
config.struct_size = sizeof(PyConfig);
PyStatus status = PyConfig_InitPythonConfig(&config);
At the beginning, I used a private "_config_version" field which was
initialized statically by a macro. But it was decided to replace
macros with functions. I only noticed today that the conversion to
function broke the API/ABI future compatibility.
PyConfig_InitPythonConfig() got uninitialized memory and didn't know
the size of the config variable.
With my change, the function now requires the "struct_size" field to
be set, and so it can support internally different versions of the
Storing the structure size directly in the structure is a common
practice in the Windows API which is a good example of long term ABI
By the way, last week, Pablo Galindo Salgado reported to me a
regression in PyInstaller caused by the implementation of my PEP.
I fixed different issues related to the "Path Configuration" (sys.path
in short), but I also added a lot of tests for this code. Previously,
there was simply no test on the path configuration!
I added a lot of comments to the C code, and I completed the public
Please test the incoming Python 3.8.0rc1 release with your project if
you embed Python into your application. Please test also projects like
PyInstaller, PyOxidizer, etc.
Note: PyInstaller requires my fix for 3.8 (not merged yet):
Night gathers, and now my watch begins. It shall not end until my death.
amazing job on getting us back on track over the weekend.
All release blockers and deferred release blockers solved. And there was relatively little additional activity on the branch -- as expected at this point! Thank you for this, it will help get the release candidate out on time.
I'm working on cutting RC1 today
Hopefully all sanity checks, as well as building the source tarball and the binary installers for macOS and Windows will all work out fine and we'll be seeing RC1 out tonight.
RC2 and the date of 3.8.0 gold
If we manage to avoid the need for RC2, we will be able to release 3.8.0 on October 14th. If we need an RC2, that will slip by a week. I hope we won't. Ideally RC1 should be identical codewise to 3.8.0.
To help our chances, please avoid any source-related activity on the 3.8 branch from now until the release of 3.8.0. Yes, that also counts for bug fixes unless they are critical. (Yeah, it might be a bit annoying but nobody wants to be the person who introduced a last minute regression in a major release.)
Note I didn't say I forbid any activity. I have no power over you, actually. More importantly though, I trust your judgement if you assess some bug is bad enough the fix absolutely has to get into 3.8.0. Moreover, I specifically said source-related activity because...
3.8.0 is important. To some users it will be the first and the last release in the 3.8 series they will see.
We need you to focus on the docs now
Are all your changes properly documented?
Did you notice other changes you know of to have insufficient documentation?
Can you help with the "What's New" document?
anxiously configure-&&-makingly y'rs
I just ran an analysis of static variable definitions in CPython code, using clang, on Ubuntu and Windows. The results should be available here:
As I understand it, _Py_IDENTIFIER instances are supposed to hold constant strings that are used in Python - e.g. "__class__", "__dict__" and so on. I noticed that there are numerous duplicates of these - e.g. 8 instances of __name__, 11 instances of __dict__, and so on - each instance is defined as static in its source file and so completely distinct from the others.
I realise the overall amount of memory used by these structures isn't large, but is there any particular benefit to having these multiple copies? The current situation seems a little untidy, at least. What would be the disadvantage of making them extern in the headers and allocating them once in some consts.c module? After all, they seem for the most part to be well-known constant strings that don't need to be encapsulated in any particular C compilation unit.
A reminder: it is time for the next quarterly maintenance release of Python 3.7. The cutoff for **3.7.5rc1** is scheduled for this coming Monday (2019-09-16) by the end of day AOE. Please review open issues and ensure that any that you believe need to be addressed in 3.7.5 are either resolved or marked as a **release blocker**. Any assistance you can provide in helping resolve issues will be greatly appreciated. Following the rc1 cutoff, changes merged to the 3.7 branch will be released in 3.7.6 three months from now unless you mark the issue as a release blocker prior to **3.7.5 final**, planned for release on **2019-09-30** and explain why the change should be cherry-picked into the final release.
Thanks to everyone who has been helping to ensure the continued success of Python 3.7! Our users truly appreciate it and are showing their confidence in us by the rapid adoption of these latest releases.
P.S. A number of core developers are participating in this year's core developer sprint taking place this week in London. So it is a good time to catch many of us in the same place at the same time (and British Summer Time, at that).
nad(a)python.org -- 
It's finally time to schedule the last releases in Python 2's life. There will be two more releases of Python 2.7: Python 2.7.17 and Python 2.7.18.
Python 2.7.17 release candidate 1 will happen on October 5th followed by the final release on October 19th.
I'm going to time Python 2.7.18 to coincide with PyCon 2020 in April, so attendees can enjoy some collective catharsis. We'll still say January 1st is the official EOL date.
Thanks to Sumana Harihareswara, there's now a FAQ about the Python 2 sunset on the website: https://www.python.org/doc/sunset-python-2/
Recently, Brett updated the developer log in the devguide
(https://devguide.python.org/developers/) to fetch the names of each core
developer and the date they were given commit privileges from the private
I think it would also be quite useful to include GitHub usernames on that list.
Currently, the only list that contributors can find the GitHub usernames for
each core developer is through the committers list on bpo. Since we will be
moving away from bpo (PEP 581), we should have a comprehensive list that is
separate from that platform.
The motivation behind creating a a new topic for this issue was Brett's
response to my comment in the PR that updated the devguide
Essentially, if no core developers have an issue with having their GitHub
username posted on the devguide, we can move forward with adding it.
Another related but more long term project is adding the GitHub usernames
to the experts index (https://devguide.python.org/experts/). This is more
involved because the bpo nosy list currently pulls from the experts index,
meaning the nosy list is dependent on the specific formatting used.
To address this, I opened a PR a couple of months ago which would add a .json
file containing the data from the experts index
(https://github.com/python/devguide/pull/517), based on the discussion in the
related issue (https://github.com/python/devguide/issues/507). If any available
core developers are experienced with structuring .json files, I would greatly
appreciate any feedback.
The next step would be converting the nosy list script to use the new .json
file instead of the experts index page, so that we could adjust the page
to also include GitHub usernames. Optimally, the contents in the experts
index would be pulled from the .json file automatically so any changes only
have to be made to a single location.