2025, Nov 01 23:31
uv में आइसोलेटेड बिल्ड के लिए STREAMLINK_USE_PYCOUNTRY कैसे सेट करें
Streamlink को स्रोत से बनाते समय GPL निर्भरताओं से बचें: uv के extra-build-variables से STREAMLINK_USE_PYCOUNTRY पास करें और --no-binary के साथ इंस्टॉल करें.
कॉरपोरेट माहौल में Streamlink की पैकेजिंग अक्सर सख्त अनुपालन आवश्यकताओं के साथ आती है। शुरुआत में ही दो प्रतिबंध सामने आ जाते हैं: पैकेज को स्रोत से बनना चाहिए और GPL-लाइसेंस वाली निर्भरताओं से बचना चाहिए। pip के साथ यह सरल है—स्रोत बिल्ड को STREAMLINK_USE_PYCOUNTRY=1 पर्यावरण चर के साथ जोड़ दीजिए। दिक्कत तब आती है जब कार्यप्रवाह को uv पर ले जाते हैं, जहाँ पैकेज बिल्ड एक आइसोलेटेड वातावरण में चलता है और add या pip ऑपरेशनों के दौरान शेल से दिए गए वेरिएबल्स को चुपचाप नज़रअंदाज़ कर देता है।
समस्या को दोहराकर देखना
pip-आधारित सेटअप में, निम्न कमांड Streamlink को स्रोत से इंस्टॉल करती है और निर्भरता का चयन GPL घटकों से हटाकर करती है:
STREAMLINK_USE_PYCOUNTRY=1 pip install streamlink==1.3.1 --no-binary streamlink
uv में इसी के बराबर प्रयास इनलाइन तरीके से वेरिएबल एक्सपोर्ट करके काम नहीं करता। कमांड चल तो जाती हैं, लेकिन बिल्ड pycountry के बजाय iso-639 और iso3166 चुन लेता है, जिन्हें दी गई नीति के तहत शिप नहीं किया जा सकता।
STREAMLINK_USE_PYCOUNTRY=1 uv add --group streamlink streamlink==1.3.1 --no-binary-package streamlink
STREAMLINK_USE_PYCOUNTRY=1 uv pip install streamlink==1.3.1 --no-binary streamlink
स्रोत बिल्ड के लिए फ्लैग सही व्यवहार करता है, लेकिन uv के जरिए पैकेज जोड़ते और इंस्टॉल करते वक्त पर्यावरण चर अनदेखा हो जाता है।
वास्तव में हो क्या रहा है
Streamlink का बिल्ड स्क्रिप्ट बिल्ड चरण के दौरान STREAMLINK_USE_PYCOUNTRY को पढ़ता है, इसलिए वेरिएबल बिल्ड वातावरण के भीतर दिखना चाहिए। uv, uv run और env फ़ाइल के साथ निष्पादन हेतु वातावरण प्रबंधन तो देता है, लेकिन वह सुविधा स्पष्ट रूप से केवल कमांड चलाने तक सीमित है। दस्तावेज़ के अनुसार, uv pip पारंपरिक pip कॉन्फ़िगरेशन हेतु बनाए गए पर्यावरण चरों को नहीं पढ़ता। यहां अधिक अहम बात यह है कि वेरिएबल को pip को नहीं, बल्कि पैकेज के बिल्ड प्रॉसेस तक पहुँचाना है। uv इन चिंताओं को अलग रखता है और पैकेजों को एक आइसोलेटेड वातावरण में बनाता है—इसीलिए आपके शेल में किया गया इनलाइन एक्सपोर्ट उस बिल्ड संदर्भ तक नहीं पहुँच पाता।
uv के साथ समाधान
uv बिल्ड-टाइम पर्यावरण चरों को इंजेक्ट करने का समर्पित तरीका देता है। pyproject.toml में extra-build-variables परिभाषित करने से वेरिएबल स्रोत से Streamlink को कंपाइल करते समय आइसोलेटेड बिल्ड वातावरण के अंदर उपलब्ध रहता है।
इससे यह सुनिश्चित होगा कि Streamlink को बिल्ड करते समय uv जिस आइसोलेटेड बिल्ड वातावरण का उपयोग करता है, उसमें यह पर्यावरण चर इंजेक्ट हो जाए।
[tool.uv]
extra-build-variables = { streamlink = { STREAMLINK_USE_PYCOUNTRY = "1" } }
यह कॉन्फ़िगरेशन होने पर, पहले की तरह स्रोत-केवल बिल्ड स्विच का उपयोग जारी रखें। uv में no-binary नियंत्रण पहले से सही काम करता है, इसलिए आप add या pip कमांड चला सकते हैं और बिल्ड को आइसोलेटेड वातावरण के भीतर STREAMLINK_USE_PYCOUNTRY दिखाई देगा।
यह क्यों महत्वपूर्ण है
एंटरप्राइज़ पैकेजिंग कार्यप्रवाह भरोसेमंद और नीति-अनुरूप बिल्ड्स पर निर्भर करते हैं। जब कोई बिल्ड स्क्रिप्ट STREAMLINK_USE_PYCOUNTRY जैसे टॉगल पर निर्णय लेकर निर्भरता ग्राफ़ चुनती है, तो बिल्ड समय पर वह वेरिएबल न पहुँचाने से प्रतिबंधित लाइसेंस चुपचाप शामिल हो सकते हैं। uv के बिल्ड-टाइम इंजेक्शन पर भरोसा रखने से प्रक्रिया पुनरुत्पादनीय, ऑडिट योग्य और नीति के अनुरूप रहती है—बिना तात्कालिक वातावरण छेड़छाड़ के।
सार और व्यावहारिक सलाह
यदि Streamlink को स्रोत से बनाना है और GPL-लाइसेंस वाली निर्भरताओं से दूर रखना है, तो बिल्ड के दौरान STREAMLINK_USE_PYCOUNTRY इंजेक्ट करने के लिए uv को कॉन्फ़िगर करें। pyproject.toml में [tool.uv].extra-build-variables के अंतर्गत यह वेरिएबल जोड़ें और source-only इंस्टॉल फ्लैग का उपयोग जारी रखें। ध्यान रखें कि UV_ENV_FILE और इसी तरह की व्यवस्थाएँ uv run से संबंधित हैं, पैकेज इंस्टॉल करने से नहीं, और uv pip जानबूझकर सामान्य pip पर्यावरण कॉन्फ़िगरेशन नहीं पढ़ता। extra-build-variables में वेरिएबल रखने से व्यवहार स्पष्ट होता है और अलग-अलग वातावरणों में स्थिर रहता है।