- 01
- 02
- 03
- 04
- 05
- 06
- 07
- 08
- 09
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
def get_build_version():
"""Return the version of MSVC that was used to build Python.
For Python 2.3 and up, the version number is included in
sys.version. For earlier versions, assume the compiler is MSVC 6.
"""
prefix = "MSC v."
i = sys.version.find(prefix)
if i == -1:
return 6
i = i + len(prefix)
s, rest = sys.version[i:].split(" ", 1)
majorVersion = int(s[:-2]) - 6
if majorVersion >= 13:
# v13 was skipped and should be v14
majorVersion += 1
minorVersion = int(s[2:3]) / 10.0
# I don't think paths are affected by minor version in version 6
if majorVersion == 6:
minorVersion = 0
if majorVersion >= 6:
return majorVersion + minorVersion
# else we don't know what version of the compiler this is
return None
Определение версии конпелятора, которой был собран «CPython».
Совершенно логично, что если в штампе версии «1900», то это 14-я версия «Visual Studio» (19 - 6 = 13, но 13 пропускаем, потому что число несчастливое).
Которая ещё называется 2015. Чтобы все окончательно запутать.
А теперь у них помимо MSVC ещё и «шланг» зачем-то есть (VC\Tools\ClangC2).
Ну у них и в версии что-то типа 1920 осталось. Так что теперь вообще хер отличишь.
2015 себя подписывает как 1900.
2017 — как 1910...1919 в зависимости от минорной версии.
2019 — как 1920...1929 и т. д.
NT 5.1: Windows XP
NT 5.2: Windows Server 2003
NT6.0: Windows Vista, Windows Server 2008 (без R, попрошу не путать)
NT6.1: Windows 7, Windows Server 2008 R2 (именно с R2, а то могут ведь напутать)
NT6.2: Windows 8, Windows Server 2012
NT6.3: Windows 8.1, Windows Server 2012 R2 (такая же фигня с буквой R)
А ещё у нас был говнокод на «Йаже», который объясняет, почему не вышла Windows 9, а сразу появилась десятка.
https://govnokod.ru/16791
А ещё на «йажаскрипте»:
Именно поэтому «Windows 9» так и не вышла.
All binary packages we were offering contained "vc#" (for instance, "vc14") in the filename to designate the Visual Studio version which has been used to build them. This number ("#") has tradionally been the major number of the respective platform toolset. The preview releases of Visual Studio 2017 shipped with platform toolset 15.00, so we used "vc15" to mark the files. The first GA release of Visual Studio 2017, however, shipped with platform toolset 14.10 (to signal the backward compatibility), but the internal Visual Studio version number stayed 15.00. To avoid confusion with already distributed packages, we stuck with the "vc15" marker. For our Visual Studio 2019 builds (PHP 7.4 and master) we finally changed from "vc#" to "vs#" (note the "s"), where the number now designates the major internal Visual Studio version number. We are planning to stick with this new naming scheme for the foreseeable future.
Т.е. у VS2017 внутренний номер студии 15, внутренний номер тулсета 14.1x, _MSC_VER >= 1910; у VS2019 внутренний номер студии 16, внутренний номер тулсета 14.2x, _MSC_VER >= 1920.
Правда, легко запомнить?
- Ты загрустила? - огорчился Рыцарь. - Давай я спою тебе в утешение песню.
- А она очень длинная? - спросила Алиса. В этот день она слышала столько стихов!
- Она длинная, - ответил Рыцарь, - но очень, очень красивая! Когда я ее пою, все рыдают... или...
- Или что? - спросила Алиса, не понимая, почему Рыцарь вдруг остановился.
- Или... не рыдают. Заглавие этой песни называется «Пуговки для сюртуков».
- Вы хотите сказать - песня так называется? - спросила Алиса, стараясь заинтересоваться песней.
- Нет, - ты не понимаешь, - ответил нетерпеливо Рыцарь. - Это заглавие так называется. А песня называется «Древний старичок».
- Мне надо было спросить: это у песни такое заглавие? - поправилась Алиса.
- Да нет! Заглавие совсем другое. «С горем пополам!» Но это она только так называется!
- А песня эта какая? - спросила Алиса в полной растерянности.
- Я как раз собирался тебе об этом сказать. «Сидящий на стене»! Вот какая это песня! Музыка собственного изобретения!
ccompiler.py — выполняет общую диспетчеризацию;
msvccompiler.py — ищет старое говно типа шестой и седьмой студии;
msvc9compiler.py — ищет студию с 8-й (2005) по 12-ю (2013).
_msvccompiler.py — ищет студии, начиная с 14-й (2015), причём для 2015 и 2017 отдельные функции.
Грёбаные костыли...
https://mail.python.org/archives/list/[email protected]/
https://mail.python.org/pipermail/distutils-sig/
https://wiki.python.org/moin/Distutils/DiscussionOverview
Не, ну это один из основополагающих пакетов питона. Ему можно рабочую группу.
Но название с подчерком это конечно полный пиздец.
Оцени задачу в багтрекере (он у меня почему-то не грузится):
http://web.archive.org/web/20191214085713/bugs.python.org/issue35067
Remove _distutils_findvs and use vswhere.exe instead.
Yes! It appears that https://bugs.python.org/issue35067 is currently blocked in Russia.
Details:
URL https://bugs.python.org/issue35067
Domain bugs.python.org
IP 188.166.48.69
Decision 27-31-2018/Ид2971-18 made on 2018-04-16 by Генпрокуратура.
This block affects IP 188.166.0.0/17.
https://github.com/microsoft/vswhere
vswhere -legacy -format json:
Вот заблокировали бажного Питоха.
Всё правильно. Учите Си.
В последних версиях немного почистили, но всё равно скелеты остались.
Кроссплатформенный язык говорили они. Виртуальная машина там, байт-код, вотэтоврот всё.