Python 3.12 के लिए Windows SciPy बिल्ड को एक छोटा चमत्कार माना गया
(labs.quansight.org)- conda-forge का SciPy Windows बिल्ड Python 3.12.0 रिलीज़ होने के दो दिन बाद उपलब्ध हो गया, जिससे SciPy इकोसिस्टम का Python 3.12 migration कई महीनों तक अटकने के बजाय सिर्फ कुछ दिनों की देरी से आगे बढ़ सका
- Python 3.12 में distutils को standard library से हटाए जाने के बाद, SciPy ने
numpy.distutilsकी जगह Meson build tool पर migrate करने का फैसला किया - Meson आगे चलकर conda-forge द्वारा इस्तेमाल किए जा रहे MSVC+gfortran संयोजन को अस्वीकार करने वाला था, और Windows पर conda-forge के उपयोग के लिए कोई मुफ्त ABI-compatible Fortran compiler उपलब्ध नहीं था
- conda-forge ने अनुमान लगाया कि अगर वह Windows पर SciPy को दोबारा build नहीं कर पाया, तो SciPy पर निर्भर कम से कम 1,000 पैकेजों का migration सभी platforms पर देरी का शिकार होगा, या फिर Python migration में Windows को बाहर रखना पड़ेगा
- LLVM 17.0, Flang का वह पहला release था जिसमें
-flang-experimental-execफ्लैग हटा दिया गया था, और Flang की परिपक्वता का स्तर लगभग “0.8 level maturity” माना गया - Meson में llvm-flang handling जोड़ने के बाद SciPy का build और install सफल रहा, और tests में
54,987 passed,2,866 skipped,245 xfailed,11 xpassed,1 warningके साथ 100% पास दर मिली {p:100}
3 टिप्पणियां
Hacker News की राय
वाकई शानदार लेख था, और अब समझ आया कि Python 3.12 में
pip installक्यों fail हो रहा था, लेकिन आगे की राह ज़्यादा उजली लगती हैमुझे Python पसंद है, लेकिन इससे यह समझने में भी मदद मिली कि Python packaging आखिर manage करने लायक अफरातफरी क्यों है
वजह खुद Python नहीं, बल्कि C/C++/Fortran build tools का non-standard होना और ecosystem का विशाल आकार है; कुछ हद तक यह ऐसी complexity है जिसे कम नहीं किया जा सकता
इसका चल पाना ही लगभग किसी चमत्कार जैसा है
Python की सफलता काफी हद तक इसलिए रही कि वह अहम mixed-language packages इस्तेमाल कर सका, और दूसरे mainstream language package managers ऐसे मुद्दों से शायद ही निपटते हैं
उदाहरण के लिए Rust का
cargoशानदार है, लेकिन वह अधिकतर Rust-only code की packaging मानकर चल सकता है; और compiled language होते हुए भी भाषा compiler को “own” करती है, इसलिए source build distribution strategy काम करती हैcargoFortran को default रूप से कैसे handle करता है, यह मुझे नहीं पता, लेकिन अगर Windows पर top-levelcargopackages को Fortran code चाहिए हो, तो शायद वह अच्छी तरह नहीं चलेगाPython ecosystem में सबसे बड़ा सुधार binary package format wheel का standardization था, और तभी scientific Python ecosystem Windows पर सच में फलना-फूलना शुरू हुआ
हालांकि binary compatibility, खासकर languages और CPU architectures के पार, जबरदस्त सिरदर्द है
software ecosystem की complexity जैसे exponential तरीके से बढ़ती दिखती है, और मैं सोचता हूं कि आखिर क्या चीज इसे Tower of Babel जैसी collapse की ओर जाने से रोकती है
बेशक यह समस्या सिर्फ software तक सीमित नहीं है, लेकिन यह अच्छा उदाहरण है
अक्सर लोग अपने पसंदीदा package manager की तुलना Python वाले से करते हैं और निष्कर्ष निकालते हैं कि Python बहुत खराब है, जबकि असल में ऐसा नहीं है
बस एक बात समझ नहीं आती कि Python वाले Fortran के बजाय C/C++ math libraries क्यों नहीं इस्तेमाल करते
यानी अफरातफरी के ऊपर और अफरातफरी जमा हो गई है
जब Linux एक चरमराता हुआ fringe case था, जिसे loosely coordinated hackers कभी-कभी अव्यावहारिक ideological constraints के साथ चला रहे थे, तब बेहतरीन लोगों द्वारा उसमें support जोड़ने के लिए भारी मेहनत करना शानदार लगता था
लेकिन अब वही चरमराता fringe case ऐसे proprietary systems बन गया है जिनकी constraints की प्रकृति लगभग hostility जैसी है और जिन्हें cyber landlords चला रहे हैं; ऐसे में उसे support करने का काम पहले जितना सकारात्मक देख पाना मुश्किल है
एक ओर, इन tools को सभी के लिए usable बनाने की गहरी परवाह सचमुच शानदार है, और मैं उस काम की सराहना करता हूं
मैं दिशा बदलने को बिल्कुल नहीं कह रहा, बस यह सोचने पर मजबूर करता है
पहले मैं सोचता था, “वाह, कितना अच्छा है कि यह काम हो रहा है”; अब ज़्यादा यह सोचता हूं, “वाह, वे शानदार लोग अगर इस काम में न अटके होते तो क्या हासिल कर पाते”
जैसा कई बार कहा गया है, SciPy developers volunteers हैं
कहानी का बड़ा हिस्सा यह समझाता है कि SciPy को Windows के लिए open-source Fortran compiler किसी के बनाने की उम्मीद क्यों करनी पड़ी, और लगता है कि बचाव मुख्य तौर पर NVIDIA developers ने किया
SciPy, Python core developers के उस मूर्खतापूर्ण और बहुत पक्षपाती फैसले की कीमत चुका रहा है जिसमें उन्होंने Windows पर Python के toolchain के लिए MinGW के बजाय MSVC चुना
मेरी राय में इसकी प्रेरणा Microsoft sponsorship से आई
core developers की list में काफी Microsoft employees हैं, जिन्हें Microsoft उस list में शामिल रहने के लिए भुगतान करता है, और ऊपर से Microsoft CPython project के CI servers का खर्च भी उठाता है
अगर Python ने toolchain में proprietary tools इस्तेमाल नहीं किए होते, तो यह पूरी समस्या टाली जा सकती थी
“Meson conda-forge में इस्तेमाल होने वाले MSVC+gfortran कॉम्बिनेशन को अस्वीकार करने की कोशिश कर रहा था” — यह bug जैसा लगता है
बिल्ड टूल का उद्देश्य दिए गए command चलाना है, “माफ़ कीजिए Dave” कहकर रोकना नहीं
समस्या यह है कि MSVC और gfortran जिन C runtime का इस्तेमाल करते हैं, खासकर gfortran की अपनी runtime library जो C में लिखी गई है, वे ABI-compatible नहीं हैं
NumPy ने जो workaround इस्तेमाल किया था, वह Fortran objects को DLL के रूप में link करके import library नाम की एक indirect layer जोड़ना और इस तरह MSVC को संतुष्ट करना था
इसलिए ऐसे DLL बनाने के लिए अतिरिक्त काम चाहिए था
यह build description file में किया जाए या Meson में, करना तो पड़ता ही; लेकिन SciPy पक्ष इनमें से किसी भी जगह यह indirect layer implement नहीं करना चाहता था, और Meson developers भी सक्रिय रूप से मदद नहीं करना चाहते थे
बेशक Meson developers ने Fortran और Cython support जैसी सामान्य मदद दी, लेकिन वे कोई जोखिमभरा सहारा नहीं देना चाहते थे
वास्तव में यह hack के काफी करीब था; उदाहरण के लिए, यह सिर्फ इसलिए काम करता था क्योंकि Fortran side Python/C side से खोली गई files का इस्तेमाल नहीं कर रहा था
https://web.archive.org/web/20180711144501/https://pav.iki.f...
निजी तौर पर मैंने Meson से ज्यादा Bazel को देखा है
Meson Python में लिखा है, इसलिए शायद SciPy के लिए अच्छा विकल्प लगा होगा, और आखिरकार चीजें ठीक रहीं तो बधाई की बात है
फिर भी कई अजीबताओं, जटिलताओं और समस्याओं के बावजूद CMake अब भी standard के करीब लगता है
यह MSVC/gcc/clang को support करने के लिए commands खुद compose भी कर सकता है
अगर आप किसी अज्ञात combination के लिए command compose करने को कहेंगे, तो जाहिर है उसे “माफ़ कीजिए Dave” कहना पड़ेगा
यह बता दूं कि मैं जल्द release होने वाले Meson competitor build system का author हूं
लेकिन [1] वह कम-ज्ञात, छोटे रत्न जैसा rant है जिसने मुझे अभी कही बात समझाई
सार यह है कि build system को वही commands चलाने चाहिए जो user ने चलाने को कहा है, बस
क्योंकि कभी-कभी programmer सच में जानता है कि वह क्या कर रहा है
शर्म की बात है, लेकिन वह comment पढ़ने से पहले मैं अपने build system को magical बनाने की सोच रहा था
पर वह comment पढ़ने के बाद मुझे समझ आया कि लोग build systems से नफरत करते हैं तो वजह वही “magic” है
[1]: https://ofekshilon.com/2016/08/30/cmake-rants/#comment-29273
मुझे लगा था ऐसे मामलों में सब WSL2 इस्तेमाल करके बात खत्म कर देते हैं
native Windows version build करने की जरूरत आखिर क्यों है?
virtual machine में काम करना असुविधाजनक है और integration भी कमजोर होती है
students भी
खासकर जब उसके ऊपर Docker Desktop इस्तेमाल किया जा सके
non-ideal स्थिति में यह best possible निकालने जैसा है
καταστροφήमेंκαταका मतलब “अचानकपन” नहीं, बल्कि “नीचे की ओर” या “के अनुसार” जैसा है, और इसमें गलत दिशा में मुड़ने का संकेत मजबूत हैκαταका विपरीत आम तौर परαναहै, लेकिनαναστροφήका शाब्दिक अर्थ “ऊपर की ओर घूमना” या reversal हैइसलिए “अच्छे turn” के अर्थ में
ευστροφη, यानी eustrophe, शायद बेहतर गढ़ा हुआ शब्द हो सकता हैफिर भी अगर JRR Tolkien से भाषा-निर्माण पर बहस करके जीत जाएं, तो वह
ευκαταστροφη, यानी सौभाग्य ही होगाकुल मिलाकर, प्रचुर grace को पकड़ने वाली बात अच्छी लगी, और ऐसी चीज दुनिया में खुशी और सुख लाती है
katastrofiमेंkataअसल में “against” के करीब है, इसलिए katastrofi किसी चीज के “पीठ फेरने” जैसा हैमेरा impression है कि सबसे अच्छे BLAS ज्यादातर C में हैं
MKL, BLIS, OpenBLAS जैसी चीजें
सोचता हूं C और Python भर से कितनी दूर तक जाया जा सकता था
यह भी सोचता हूं कि अगर आज शुरू करते तो शायद सीधे
libflameचुनतेबेशक SciPy में iterative methods, sparse matrices आदि कई दूसरे features भी हैं, इसलिए Fortran से बचना मुश्किल हो सकता है
फिर भी Fortran एक शानदार language है, और खुशी है कि Windows पर tooling की स्थिति कम से कम सुधरनी शुरू हुई है
SciPy में खुद भी काफी Fortran code है, और उसे फिर से लिखने के लिए कई वर्षों का manpower चाहिए
संभव होने के बाद Fortran का इस्तेमाल करने वाले कुछ core parts हटाए भी गए
उदाहरण के लिए FFT से जुड़े हिस्से
शानदार लेख
इस साल मैंने Python bindings वाले CMake C++ project को modernize करने में काफी समय लगाया, और उसे नए feedstock के रूप में conda-forge में सफलतापूर्वक जोड़ने के बाद मैं पूरे confidence से कह सकता हूं
अगर मैं god-emperor बना, तो IT से जुड़ा मेरा पहला कदम सभी universes से Windows को हमेशा के लिए जड़ से खत्म करना होगा
यह बहुत भोला सवाल है, लेकिन क्या Fortran semantics इतने अलग हैं कि पहले उसे C में बदलकर फिर C compiler से compile नहीं किया जा सकता?
उसके बाद क्या उसे C में maintain भी नहीं किया जा सकता?
ऐसा नहीं लगता कि इतनी पुरानी libraries maintain करने वाले Fortran लोग बहुत होंगे, फिर भी maintenance तो चाहिए ही न?
Fortran में pointers नहीं होते और सिर्फ arrays होते हैं, और function arguments aliases नहीं रख सकते, इसलिए
COMMONblocks की भयावहता को फिलहाल अलग रखें तो aggressive optimization और vectorization आसान हो जाता हैstandard Fortran math libraries बस ठीक से काम करती हैं और तेज़ होती हैं
C/C++ में भी, खासकर C के
restrictkeyword का उपयोग करके, बराबर speed वाला code लिखा जा सकता हैलेकिन मौजूदा code को
f2cstep से convert करने पर कई मामलों में performance काफी खराब हो जाती हैFortran developers भी पर्याप्त संख्या में हैं
application development के लिए यह भयानक है, लेकिन वह Fortran का मुख्य क्षेत्र नहीं है
f2c दशकों से मौजूद है
एक छोटी-सी जिज्ञासा है: मेरी जानकारी में
aarch64औरarm64एक ही चीज़ हैंक्या मेरी समझ गलत है?
[1] https://www.phoronix.com/news/MTY5ODk
aarch64आमतौर पर Linux को दर्शाता है, औरarm64आमतौर पर macOS ARM कोनाम अलग क्यों हैं, यह समझने लायक मैं इस क्षेत्र को अच्छी तरह नहीं जानता
Python के build system बदलावों का पीछा करना वाकई मुश्किल है
Windows पर performance numbers भी जानने की उत्सुकता है
हालांकि प्राथमिक तौर पर शायद यह महत्वपूर्ण न हो
क्योंकि गंभीर काम शायद Linux machine पर ही चलेगा
बड़ा transition यह था कि सभी से PEP 517 अपनवाया जाए, खासकर पुराने Setuptools projects को transition कराना
क्योंकि 99.9% समय operating system नहीं, बल्कि user code चल रहा होता है
यह तो binary compile होने वाली भाषाओं पर हमारी लाचारी को बहुत ही नंगा करके दिखाने वाला मामला है।
क्या Python में तो समस्या हल हो गई, लेकिन दूसरे ecosystems में नहीं हो पाई? इसलिए ही शायद pre-built binaries उपलब्ध कराए जाते होंगे।