Нашли или выдавили из себя код, который нельзя назвать нормальным,
на который без улыбки не взглянешь?
Не торопитесь его удалять или рефакторить, — запостите его на
говнокод.ру, посмеёмся вместе!
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 пропускаем, потому что число несчастливое).
Чтобы ещё больше запутать, 2017 тоже называется 14, и 2019 тоже называется 14, только минорные версии различаются. Начиная с 2015, всё это говно ставится в директорию «Microsoft Visual Studio 14.0», а для 2017 и 2019 создаются поддиректории (типа VC\Tools\MSVC\14.15.26726).
А теперь у них помимо MSVC ещё и «шланг» зачем-то есть (VC\Tools\ClangC2).
Если я правильно понял, отличить можно.
2015 себя подписывает как 1900.
2017 — как 1910...1919 в зависимости от минорной версии.
2019 — как 1920...1929 и т. д.
"Windows 2013" for Windows 8.1 and Windows Server 2012 R2
"Windows 2012" for Windows 8 and Windows Server 2012
"Windows 2009" for Windows 7 and Windows Server 2008 R2
"Windows 2001" for Windows XP
"Windows 2001.1" for Windows Server 2003
А ещё
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, а сразу появилась десятка.
Visual Studio 6.0 1200
Visual Studio .NET 2002 (7.0) 1300
Visual Studio .NET 2003 (7.1) 1310
Visual Studio 2005 (8.0) 1400
Visual Studio 2008 (9.0) 1500
Visual Studio 2010 (10.0) 1600
Visual Studio 2012 (11.0) 1700
Visual Studio 2013 (12.0) 1800
Visual Studio 2015 (14.0) 1900
Visual Studio 2017 RTW (15.0) 1910
Visual Studio 2017 версия 15.3 1911
Visual Studio 2017 версии 15.5 1912
Visual Studio 2017 версии 15.6 1913
Visual Studio 2017 версии 15.7 1914
Visual Studio 2017 версии 15.8 1915
Visual Studio 2017 версии 15.9 1916
Visual Studio 2019 RTW (16.0) 1920
Visual Studio 2019 версии 16.1 1921
Visual Studio 2019 версии 16.2 1922
Visual Studio 2019 версии 16.3 1923
Visual Studio 2019 версии 16.4 1924
Visual Studio 2019, версия 16.5 1925
Visual Studio 2019 версии 16.6 1926
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.
Они вышли на опушку леса. Алиса вздрогнула от неожиданности - в эту минуту она думала только о пудинге.
- Ты загрустила? - огорчился Рыцарь. - Давай я спою тебе в утешение песню.
- А она очень длинная? - спросила Алиса. В этот день она слышала столько стихов!
- Она длинная, - ответил Рыцарь, - но очень, очень красивая! Когда я ее пою, все рыдают... или...
- Или что? - спросила Алиса, не понимая, почему Рыцарь вдруг остановился.
- Или... не рыдают. Заглавие этой песни называется «Пуговки для сюртуков».
- Вы хотите сказать - песня так называется? - спросила Алиса, стараясь заинтересоваться песней.
- Нет, - ты не понимаешь, - ответил нетерпеливо Рыцарь. - Это заглавие так называется. А песня называется «Древний старичок».
- Мне надо было спросить: это у песни такое заглавие? - поправилась Алиса.
- Да нет! Заглавие совсем другое. «С горем пополам!» Но это она только так называется!
- А песня эта какая? - спросила Алиса в полной растерянности.
- Я как раз собирался тебе об этом сказать. «Сидящий на стене»! Вот какая это песня! Музыка собственного изобретения!
Чтобы собралось и UBца не соснуть. Они как бы только последние годы стали binary compatible. Кстати, удачи им с поиском последних версий конпелятора, там всё гораздо веселее чем в 10 и 14...
Я влез поглубже в питоновский distutils. Поиском конпелятора занимаются несколько файлов:
ccompiler.py — выполняет общую диспетчеризацию;
msvccompiler.py — ищет старое говно типа шестой и седьмой студии;
msvc9compiler.py — ищет студию с 8-й (2005) по 12-ю (2013).
_msvccompiler.py — ищет студии, начиная с 14-й (2015), причём для 2015 и 2017 отдельные функции.
TEH3OPHblu_nemyx # 0
Совершенно логично, что если в штампе версии «1900», то это 14-я версия «Visual Studio» (19 - 6 = 13, но 13 пропускаем, потому что число несчастливое).
bormand # 0 ⇈
Которая ещё называется 2015. Чтобы все окончательно запутать.
TEH3OPHblu_nemyx # 0 ⇈
А теперь у них помимо MSVC ещё и «шланг» зачем-то есть (VC\Tools\ClangC2).
bormand # 0 ⇈
Ну у них и в версии что-то типа 1920 осталось. Так что теперь вообще хер отличишь.
TEH3OPHblu_nemyx # 0 ⇈
TEH3OPHblu_nemyx # 0 ⇈
2015 себя подписывает как 1900.
2017 — как 1910...1919 в зависимости от минорной версии.
2019 — как 1920...1929 и т. д.
guest # 0 ⇈
"Windows 2013" for Windows 8.1 and Windows Server 2012 R2
"Windows 2012" for Windows 8 and Windows Server 2012
"Windows 2009" for Windows 7 and Windows Server 2008 R2
"Windows 2001" for Windows XP
"Windows 2001.1" for Windows Server 2003
TEH3OPHblu_nemyx # 0 ⇈
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, а сразу появилась десятка.
1024-- # 0 ⇈
TEH3OPHblu_nemyx # 0 ⇈
https://govnokod.ru/16791
А ещё на «йажаскрипте»:
Именно поэтому «Windows 9» так и не вышла.
guest # 0 ⇈
Откиньесь на спинку кресла, пока Windows {a71019f4-c33a-4802-bf9b-bd86f26e473d} устанавливается на ваш компьютер!
TEH3OPHblu_nemyx # 0 ⇈
guest # 0 ⇈
Я в BCD такое видел.
Ну там есть запись
{a71019f4-c33a-4802-bf9b-bd86f26e473d}
а есть и
{a71019f4-c33a-4802-bf9b-bd86f16e473d}
TEH3OPHblu_nemyx # 0 ⇈
KOPOHABuPYC # 0 ⇈
guest # 0 ⇈
одна версия нечаянно совпала
TEH3OPHblu_nemyx # 0 ⇈
TEH3OPHblu_nemyx # 0 ⇈
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.
Правда, легко запомнить?
jojaxon # 0 ⇈
TEH3OPHblu_nemyx # 0 ⇈
- Ты загрустила? - огорчился Рыцарь. - Давай я спою тебе в утешение песню.
- А она очень длинная? - спросила Алиса. В этот день она слышала столько стихов!
- Она длинная, - ответил Рыцарь, - но очень, очень красивая! Когда я ее пою, все рыдают... или...
- Или что? - спросила Алиса, не понимая, почему Рыцарь вдруг остановился.
- Или... не рыдают. Заглавие этой песни называется «Пуговки для сюртуков».
- Вы хотите сказать - песня так называется? - спросила Алиса, стараясь заинтересоваться песней.
- Нет, - ты не понимаешь, - ответил нетерпеливо Рыцарь. - Это заглавие так называется. А песня называется «Древний старичок».
- Мне надо было спросить: это у песни такое заглавие? - поправилась Алиса.
- Да нет! Заглавие совсем другое. «С горем пополам!» Но это она только так называется!
- А песня эта какая? - спросила Алиса в полной растерянности.
- Я как раз собирался тебе об этом сказать. «Сидящий на стене»! Вот какая это песня! Музыка собственного изобретения!
bormand # 0
guest # 0 ⇈
TEH3OPHblu_nemyx # 0 ⇈
bormand # 0 ⇈
TEH3OPHblu_nemyx # 0 ⇈
ccompiler.py — выполняет общую диспетчеризацию;
msvccompiler.py — ищет старое говно типа шестой и седьмой студии;
msvc9compiler.py — ищет студию с 8-й (2005) по 12-ю (2013).
_msvccompiler.py — ищет студии, начиная с 14-й (2015), причём для 2015 и 2017 отдельные функции.
Грёбаные костыли...
bormand # 0 ⇈
TEH3OPHblu_nemyx # 0 ⇈
https://mail.python.org/archives/list/distutils-sig@python.org/
https://mail.python.org/pipermail/distutils-sig/
https://wiki.python.org/moin/Distutils/DiscussionOverview
bormand # 0 ⇈
Не, ну это один из основополагающих пакетов питона. Ему можно рабочую группу.
Но название с подчерком это конечно полный пиздец.
TEH3OPHblu_nemyx # 0 ⇈
Оцени задачу в багтрекере (он у меня почему-то не грузится):
http://web.archive.org/web/20191214085713/bugs.python.org/issue35067
Remove _distutils_findvs and use vswhere.exe instead.
TEH3OPHblu_nemyx # 0 ⇈
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.
bormand # 0 ⇈
TEH3OPHblu_nemyx # 0 ⇈
https://github.com/microsoft/vswhere
vswhere -legacy -format json:
guest # 0 ⇈
3.14159265 # 0 ⇈
Вот заблокировали бажного Питоха.
Всё правильно. Учите Си.
3.14159265 # 0 ⇈
TEH3OPHblu_nemyx # 0 ⇈
В последних версиях немного почистили, но всё равно скелеты остались.
KOPOHABuPYC # 0 ⇈
3.14159265 # 0 ⇈
Кроссплатформенный язык говорили они. Виртуальная машина там, байт-код, вотэтоврот всё.
TEH3OPHblu_nemyx # 0 ⇈
1024-- # 0 ⇈