<p>पाइप स्थापित करें - नामस्थान पैकेजों के लिए उपयुक्त और पाइप स्थापित टकराव</p>

को निर्मित 14 मार्च 2011  ·  41टिप्पणियाँ  ·  स्रोत: pypa/pip

एक नाम स्थान पैकेज स्थापित संपादन योग्य और एक नियमित रूप से स्थापित एक साथ अच्छी तरह से काम नहीं करते हैं।

auto-locked bug

सबसे उपयोगी टिप्पणी

किसी भी जिज्ञासु के लिए, यहाँ एक विस्तृत सूची है कि कैसे नेमस्पेस पैकेज pip install , pip install -e , python setup.py install , और python setup.py develop :

https://github.com/jonparrott/namespace-pkg-tests/blob/master/table.md

tl; dr: आप pip install -e और python setup.py develop उपयोग कर सकते हैं जब तक कि आपके नेमस्पेस में हर दूसरे पैकेज pip का उपयोग करके स्थापित नहीं किया गया हो।

सभी 41 टिप्पणियाँ

यहाँ एक ही मुद्दा :(

मैंने इस बग का परीक्षण करने के लिए एक कोड पोस्ट किया है: http://public.hg.stephane-klein.info/hgwebdir.cgi/test_pip_namespace_bug_3/

यहां समस्या की जड़ यह है कि सेटपूलों में नेमस्पेस पैकेज बनाने के दो तरीके शामिल हैं: __init__.py विधि (जो कि मनुष्यों द्वारा प्रलेखित और प्रयोग करने योग्य है), और ...-nspkg.pth फ़ाइल विधि, जिसमें केवल --single-version-externally-managed (जो पाइप उपयोग करता है) के साथ उपयोग किया जाता है। दो विधियाँ एक दूसरे के अनुकूल नहीं हैं।

IRC पर mitsuhiko और अन्य लोगों के साथ कुछ चर्चा के बाद, यह पाइप के लिए सबसे अच्छा (आंशिक) समाधान लगता है "पिप इंस्टॉल-ई" मानक सेटपूलों का एक संशोधित संस्करण जोड़ें ... प्रत्येक विकसित पैकेज के लिए nspkg.pth फ़ाइल। । (आवश्यक संशोधनों को sitedir के बजाय विकसित अंडे-लिंक पथ का उपयोग करना है, और init के लिए चेक को पूरी तरह से छोड़ना है, क्योंकि एक विकसित-स्थापित नेमस्पेस पैकेज में init .py होगा)। इसका मतलब है कि पाइप कम से कम खुद के साथ संगत होगा (पाइप-स्थापित और पाइप-संपादन योग्य स्थापित नामस्थान पैकेज एक साथ काम करेंगे)। पिप-इंस्टाल्ड और सेटप्टूल / डिस्ट्रीब्यूटेड नेमस्पेस पैकेज संगत नहीं होंगे।

मुझे हाल ही में इस पर भी काट मिला। इसके कारण एक और समस्या यह है कि नाम स्थान पैकेज के लिए __init__.py स्थापित नहीं है (यह मानते हुए कि आपने उस नामस्थान में केवल एक पैकेज स्थापित किया है, और इसे स्थापित किया गया था - सिंगल्स-संस्करण-बाहरी रूप से प्रबंधित) नाक के मॉड्यूल खोज को तोड़ता है। हो सकता है कि यह नाक की गलती हो, लेकिन मुझे अभी भी यह उम्मीद करना उचित है कि अगर किसी निर्देशिका में __init__.py न हो तो वह पायथन पैकेज नहीं है।

मुझे लगता है कि पाइप को किसी तरह बस nspkg.pth चीज को पूरी तरह से मारना चाहिए और __init__.py स्थापित करना चाहिए। जब तक पैकेज अपने आप सही तरीके से डिज़ाइन किया गया है (यानी __init__.py को विस्तारा_पथ / घोषणापत्र के अलावा खाली है) यह समस्या नहीं होनी चाहिए। -सिंगल-वर्जन-एक्सटर्नली-मैनेज को सिस्टम पैकर्स के साथ डिजाइन किया गया था, लेकिन वे पहली जगह में पाइप का इस्तेमाल नहीं करेंगे। तो मुझे आश्चर्य है कि अगर इस व्यवहार को पूरी तरह से बिना किसी घुसपैठ के निष्क्रिय करने का कोई तरीका है।

+1 '-सिंगल-वर्जन-बाहरी-प्रबंधित' से दूर जाने के लिए: यह विकल्प पाइप के उपयोग के मामलों के लिए बिल्कुल भी इरादा नहीं है। यदि पाइप कम से कम उतना अच्छा काम नहीं कर सकता है जितना कि easy_install के रूप में सामान स्थापित करना, इसका उद्देश्य क्या है?

--single-version-externally-managed से पूरी तरह से स्विच करने से कुछ होने वाला नहीं है; फ्लैट इंस्टॉल एक सुविधा है। नामस्थान पैकेज के मामले में इससे दूर हटना केवल एक संभावना है कि मैं इन मुद्दों से बचने के लिए विचार करूं। मुझे यह पसंद नहीं है, लेकिन सेटपूल / डिस्ट्रीब्यूटर्स में निर्मित दो प्रकार के नामस्थान पैकेज सपोर्ट के बीच अंतर्निहित असंगति को देखते हुए, कोई भी बढ़िया विकल्प नहीं दिखता है।

यह कहना कि --single-version-externally-managed "पाइप के उपयोग के मामलों के लिए अभिप्रेत नहीं है" कहीं न कहीं गलत और एक लाल हेरिंग के बीच है। इस फ्लैग का उद्देश्य फ्लैट सिंगल-वर्जन इंस्टॉलेशन की अनुमति देना है, जो कि easy_install के अलावा किसी टूल द्वारा प्रबंधित है। यह वही है जो पाइप इसके लिए उपयोग करता है; तथ्य यह है कि मूल रूप से (और गलत तरीके से) सेटप्टोल्स लेखक ने सोचा कि केवल सिस्टम पैकर्स को इस तरह की सुविधा में दिलचस्पी होगी अप्रासंगिक है।

यहाँ टूटना उस झंडे के साथ नेमस्पेस पैकेज के लिए उपयोग किए जाने वाले तकनीक सेटपूलों में एक अंतर्निहित बग है, और बग तब मौजूद है जब ध्वज का उपयोग मूल रूप से लक्षित दर्शकों द्वारा किया जाता है, सिस्टम पैकर्स (मैंने पहली बार बग को एक "के बीच बातचीत में देखा था" setup.py विकसित "स्थापित पैकेज और सिस्टम-पैकेज-स्थापित नेमस्पेस पैकेज)।

मैं इस बग को भी अनुभव कर रहा हूं। मुझे लगता है कि यह उन अनमोल बगों में से एक है जो यहां रहने के लिए है। ओह अच्छा।

जब एक नेमस्पेस पैकेज शामिल होता है, तो मैं --single-version-externally-managed से बचने के लिए एक पैच स्वीकार करता हूं, जो मुझे लगता है कि इस मुद्दे को हल करेगा। वर्तमान में मेरे पास उस पैच को लिखने की कोई योजना नहीं है।

क्यों नहीं एक विकल्प है कि हम pip install --single-version-externally-managed का उपयोग न करने के लिए पारित कर सकते हैं? मैं यह टिप्पणी करके परीक्षण करता हूं कि ./pip/req.py:568 और सभी पैकेज अब अंडे के डायर में स्थापित हो गए, जैसे कि easy_install करता है। शायद ही कभी मैं ऐसा करना चाहता हूं अगर मैंने पाइप और easy_install दोनों का उपयोग किया है ताकि मेरा site-packages कुछ पैकेजों के साथ मिश्रण न हो और कुछ स्थापित न हों।

मैं एक के साथ एक समस्या नहीं दिख रहा है --egg विकल्प से बाहर करने के लिए --single-version-externally-managed

https://github.com/k4ml/pip/commit/93cd6b16207d2eba201a7fc3126624b616f5e6f9

अगर मैं सही दिशा में जा रहा हूं तो क्या कोई टिप्पणी कर सकता है? यह पाइप कोड पर हैकिंग का मेरा पहला मौका है, इसलिए यह मेरे कुछ मिनटों की झलक पर आधारित है, बस pip install --egg somepackages करने के लिए सिंगल एग डीर में सब कुछ इंस्टॉल करें।

अगर मैं सही दिशा में जा रहा हूं तो क्या कोई टिप्पणी कर सकता है?

मुझे अच्छा लग रहा है, बस एक परीक्षा की जरूरत है। टेस्ट ज्यादातर उच्च-स्तरीय होते हैं
ScriptTest का उपयोग करके एकीकरण परीक्षण, एक के आधार पर लिखना आसान होना चाहिए
मौजूदा उदाहरण। इस मामले में आप बस उस परीक्षण को स्थापित करना चाहते हैं
एक नमूना पैकेज एक .egg फ़ाइल में परिणाम करता है, न कि एक फ्लैट स्थापना, में
साइट-संकुल। आपको स्थानीय फाइल सिस्टम से एक पैकेज स्थापित करना चाहिए,
नेटवर्क नहीं: tests/packages/FSPkg शायद ठीक काम करेगा। जोड़ा जा रहा है
tests/test_basic.py लिए परीक्षण ठीक है।

धन्यवाद!

पुल अनुरोध - https://github.com/pypa/pip/pull/541

मैं इस ध्वज को pip.conf में स्थापित करना संभव बनाने के बारे में सोच रहा हूं। तुम उस बारे मे क्या सोचते हो ?

मैं इस ध्वज को pip.conf में स्थापित करना संभव बनाने के बारे में सोच रहा हूं। तुम उस बारे मे क्या सोचते हो ?

चलो पुल अनुरोध पर चर्चा करते हैं।

मर्ज किए गए पुल अनुरोध # 541, जो एक वर्कअराउंड प्रदान करता है। धन्यवाद @ k4ml!

सूचना: --egg विकल्प, जो कि इस समस्या को ठीक करने के लिए जोड़ा गया था, संभवतः कोई वैकल्पिक वैकल्पिक हल नहीं निकाला जा सकता है। # 1749 में चर्चा देखें

यहाँ वास्तव में इस मुद्दे को पुन: पेश करने के लिए एक स्क्रिप्ट है

https://gist.github.com/Ivoz/d9bff05069e0ec53e6ea

मैं - thegg समाधान का बहुत बड़ा प्रशंसक नहीं हूं, लेकिन इसके लिए कम बोझिल होने की आवश्यकता है।

वर्कअराउंड के बिना, विकास करते समय, मैं एक बार उपयोग नहीं कर सकता - फिर एक बार संपादित करें और परीक्षण करें। हर बार जब मैं अपना कोड सहेजता हूं तो मुझे pip install -I --no-deps . चलाने

जिस तरह से इस पूरे मुद्दे के सामने आने के साथ समस्या का हिस्सा यह है कि यह चुप है। आप बस एक मॉड्यूल आयात नहीं कर सकते, भले ही यह स्थापित हो और पाइप आपको बताता है कि यह वहां है।

यह एक सकारात्मक कदम होगा कि अगर किसी नामस्थान में गैर-संपादन योग्य पैकेज पहले से ही स्थापित है, तो एक नेमस्पेस के हिस्से के रूप में संपादन योग्य पैकेजों को स्थापित करने की कोशिश करने पर, पाइप की शिकायत करने के लिए। या वैकल्पिक रूप से शिकायत करने के लिए अगर एक गैर संपादन योग्य पैकेज को स्थापित करने की कोशिश की जा रही है जो एक नामस्थान का हिस्सा है जहां उस नामस्थान में एक संपादन योग्य पैकेज पहले से स्थापित है।

एक अन्य विकल्प, यदि हम वास्तव में नाम स्थान पैकेज बनाना चाहते हैं और संपादन योग्य अधिष्ठापन हमेशा काम करते हैं, तो यह हो सकता है कि यदि नाम स्थान पैकेज को संपादन योग्य के रूप में स्थापित किया गया है, तो पाइप उस नामस्थान में अन्य पैकेजों को वांछित पैकेज के साथ पुन: व्यवस्थित कर सकता है।

मैंने इस मुद्दे को setuptools https://bitbucket.org/pypa/setuptools/issue/250/develop-and-install-single-version में 2 प्रस्ताव प्रस्तुत किए

डाल

आयात pkg_resource; pkg_resources.fixup_namespace_packages ( '')

साइट-संकुल में एक .pth फ़ाइल, पिप स्थापित -ई स्थापित चीजों को सही ढंग से काम करने के लिए पर्याप्त लगती है।

यह दो पैकेजों को समान शीर्ष नामस्थान के साथ भी प्रभावित करता है, दोनों को संपादन योग्य के रूप में स्थापित किया गया है। दूसरा पैकेज स्थापित टूट गया है।

हम अपने सभी अनुप्रयोगों के लिए एक वैश्विक नाम स्थान का उपयोग करते हैं और इस तरह यह मुद्दा थोड़ा कठिन हो जाता है (+ यह समस्या जो सेटटॉप्स पहियों का समर्थन नहीं करती है, जो कि हमारे विंडोज़ तैनाती प्लेटफार्मों पर एक कंपाइलर की कमी के कारण आवश्यक है)। इसके अलावा सभी अनुशंसित समाधान पायथन 3.4 के साथ हमारे सेटअप में विफल होते दिख रहे हैं।

यह महसूस करने के बाद कि परियोजना के लिए pip install -e setup.py develop चलता है, जो कि संपादन योग्य होना चाहिए, मैंने सेटपूल प्रक्रिया में हुक किया और एक * .pth फ़ाइल लिखी, जो कि पायथन प्रक्रिया के दौरान नेमस्पेस नाम से "परिचय" करती है। शुरू होता है। यह सेटटॉप 18 और पाइप 7.1.0 का उपयोग करते समय हमारे लिए समस्या का समाधान करता है।

एक उदाहरण setup.py फ़ाइल, जो दिखाता है कि यह कैसे प्राप्त किया जा सकता है, यहां पाया जा सकता है:
https://gist.github.com/cbrand/a1624ac3e9c81ce45fcb

मुझे उम्मीद है कि यह अन्य लोगों के लिए भी उपयोगी है।

मैं आज भी इस में भाग गया, और यह मुझे buildout से virtualenv + pip में स्विच करने से रोक रहा है।

मैंने एक छोटा डेमो बनाया जिससे समस्या प्रदर्शित होती है। इसे .tar.gz अनपैक करने के लिए और इसके अंदर {{run-me}} स्क्रिप्ट चलाएँ। एक फिक्स परीक्षण करते समय उपयोगी हो सकता है।

मैं इस मुद्दे को भी उठा रहा हूं।

समझने की कोशिश करते हुए, मैं https://github.com/pypa/pip/issues/3#issuecomment -1659959 में @carljm द्वारा प्रस्तावित समाधान के पार आया, अर्थात "पाइप इंस्टॉल-ई" मानक का संशोधित संस्करण जोड़ें setuptools ... प्रत्येक विकसित-स्थापित package_ के लिए nspkg.pth फ़ाइल।

मैंने स्वयं उस दृष्टिकोण के साथ प्रयोग किया है और यह अच्छी तरह से काम करता है। ऐसा लगता है कि यह एक ही समय में उथले स्रोत के पेड़ों के लापता नामस्थान पैकेज के प्रश्न को हल करेगा जैसा कि # 3160 में वर्णित है।

तो मैं सोच रहा था कि क्या उस दृष्टिकोण को अभी भी वैध माना जाता है, अगर इसे लागू करने का कोई प्रयास किया गया था, और यदि इसके लिए एक पैच पर विचार किया जाएगा?

इसलिए ... निकट भविष्य में इसे ठीक करने की कोई उम्मीद नहीं है?

pkg_resources.get_distribution() का कुछ दुष्प्रभाव आयात कार्य करता है। हमने यह पता लगाया जब कोड जो कि लोड किए गए प्रवेश बिंदुओं ने सही ढंग से काम किया, जबकि अजगर खोल विफल हो गया।

यह भी समझा सकता है कि क्यों एक ipython खोल को संकुल आयात करने में कोई समस्या नहीं है।

मुझे आश्चर्य है कि यह बग अभी भी 5 वर्षों के बाद कोई स्पष्ट काम नहीं कर रहा है।

यदि आपका काम एक एकीकृत ढांचे में एक साथ चौखटे को गोंद करना है, तो पाइप आपके काम को बेकार कर देता है। मुझे ईमानदारी से पता नहीं है कि इस बग के कारण मैं अपने काम को कैसे आगे बढ़ा सकता हूं।

यह मुख्य रूप से स्वयंसेवी परियोजनाओं में समस्या को ठीक करने के लिए एक कठिन है,
सेटपूल में आवश्यक समर्थन को जोड़ने के लिए स्वतंत्र महसूस करें ताकि पाइप इसे सही कर सके

ब्रैंडन Github सूचनाएं @github.com लिखते हैं:

मुझे आश्चर्य है कि यह बग अभी भी 5 वर्षों के बाद कोई स्पष्ट काम नहीं कर रहा है।

हाँ, यह एक दया है।

यदि आपका काम एक एकीकृत ढांचे में एक साथ चौखटे को गोंद करना है,
पाइप आपके काम को बेकार कर देता है। मुझे ईमानदारी से पता नहीं है कि कैसे आगे बढ़ना है
इस बग के कारण मेरा काम।

मैंने हाल ही में ऊपर उल्लेखित fixup_namespace_packages ('') हैक लागू किया है और
यह काम करने लगता है: मैंने vev के साइट-पैकेज के अंदर z.pth बनाया
जिसमें import pkg_resources; pkg_resources.fixup_namespace_packages('')

एक कोशिश के लायक, IMHO।

अभी तक यहाँ एक और टक्कर!

मैं बस यह उल्लेख करूंगा कि हर एक मज्जा पैकेज नेमस्पेस (कुछ पैकेज चार या पांच तक की आबादी वाले) का उपयोग करता है और यह विशेष मुद्दा मेरे अस्तित्व का एक सा हो गया है जब यह नए उपयोगकर्ताओं को विकास टूल के साथ स्थापित करने में मदद करता है । मुझे इसके इस्तेमाल से सिर्फ 60 पैकेजों में शर्म आ रही है। entry_points नोट भी दिलचस्प है, क्योंकि वस्तुतः प्रत्येक पैकेज में एक नेमस्पेस का योगदान entry_points योगदान देता है।

pip दृष्टिकोण केवल मेरे अनुभव में काम करता है, अगर _every_ पैकेज डिस्क से, संपादन योग्य है, जो नेमस्पेस पर सहयोग करता है। यदि एक पैकेज को पाइप के माध्यम से गैर-संपादन योग्य स्थापित किया जाता है, तो नए उपयोगकर्ताओं के लिए यार्न की पूरी गेंद कुछ बहुत, बहुत ही अप्रिय लक्षणों के साथ शुरू होती है। (जैसे कि आंतरायिक रूप से आयात करने योग्य मॉड्यूल; माता-पिता के नामस्थान को आयात करने और namespace.__path___ का सत्यापन करने की एक सामान्य पवित्रता जांच ने परीक्षण में अपराधी बोर्कड पैकेज की तेजी से पहचान की है।) ठीक से स्थापित पैकेज और शुद्ध setup.py develop 'd मिलाकर। स्रोत वाले (पाइप से बचना) प्रकट होते हैं, हालांकि, काम करने के लिए।

हम यह भी अजीब परिस्थितियों में सक्षम होने लगते हैं जहां एक ही नामस्थान-योगदान पैकेज को तीन अलग-अलग तरीकों से स्थापित किया जा सकता है, कभी-कभी सभी एक साथ। (बार-बार कॉल करने पर pip uninstall , प्रत्येक फ़ाइल को अधिक फाइल्स मिलना उतना ही प्रफुल्लित करने वाला है जितना कि यह दुर्भाग्यपूर्ण है।) pip install -e का उपयोग करते समय निर्भरता की स्थापना असंगत प्रतीत होती है। अधिकांश मामलों में हम ठीक से अनपैक्ड नामस्थान (स्थापित), pth-link files (स्थापित संपादन योग्य) के साथ समाप्त होते हैं, और एक मामले में हम किसी तरह zip_safe होने के बावजूद .egg स्थापित करने में कामयाब रहे। zip_safe जा रहा है False कि निर्भर पैकेज पर और कोई .egg वितरण Pypi पर उपलब्ध कराया जा रहा।

नेमस्पेस मुद्दों के साथ निराशा चौथी बार एक आभासी वातावरण को खरोंच से शुरू करने के लिए nuked है के बाद एक चरम तक पहुँच जाता है। ;)

समाधान नहीं है लेकिन मैंने अभी कुछ नोट रखे हैं। 'संपादन योग्य' पैकेज, नामांकित पैकेज और सामान्य पैकेज के बीच मिश्रण करते समय, मुझे बिल्डआउट + mr.developer के साथ अधिक भाग्य मिलता है।

जबकि उल्लिखित हैक @lelit कुछ संकुल के लिए काम करने लगता है, यह कुछ संकुल को तोड़ता है / हमारे लिए बनाता है।

पाइप इंस्टॉल और संपादन योग्य मोड के साथ कुछ खेलने के बाद, मैं @carljm (प्रत्येक संपादन योग्य पैकेज के लिए एक -nspkg.pth फ़ाइल को जोड़ते हुए) के समान विचार के साथ आया था, लेकिन किसी ने भी यह लागू नहीं किया है कि लगता है (या यह अब समाप्त हो गया था - -Egg विकल्प?)।

क्या यह अभी भी PEP420 के साथ अजगर के नए संस्करणों पर एक मुद्दा है? (पढ़ें: क्या यह अजगर के एक नए संस्करण में बदलने में मदद करेगा?)

PEP420 शैली का उपयोग करने से प्रभावी रूप से मुझे कई बार संपादन मोड में मदद मिली।

दुर्भाग्य से यह अपने स्वयं के ग्लिच के साथ आता है: उदाहरण के लिए, सेटपूलट ' find_packages इसका समर्थन नहीं करता है , इसलिए मेरे नए पैकेजों में निम्नलिखित हैक शामिल हैं:

-    packages=find_packages('src'),
+    packages=['toplevel.child.' + package
+              for package in find_packages('src/toplevel/child/')],

किसी को भी प्रत्येक संपादन योग्य पैकेज के लिए एक -nspkg.pth जोड़कर लागू नहीं किया गया लगता है।

सेप्टुपूलस 31 देखें जो इस सुविधा के लिए समर्थन जोड़ता है, और पायथन 3.5+ पर PEP-420 पैकेज के साथ सह-मौजूद है।

किसी भी जिज्ञासु के लिए, यहाँ एक विस्तृत सूची है कि कैसे नेमस्पेस पैकेज pip install , pip install -e , python setup.py install , और python setup.py develop :

https://github.com/jonparrott/namespace-pkg-tests/blob/master/table.md

tl; dr: आप pip install -e और python setup.py develop उपयोग कर सकते हैं जब तक कि आपके नेमस्पेस में हर दूसरे पैकेज pip का उपयोग करके स्थापित नहीं किया गया हो।

मैं इस मुद्दे को बंद करने जा रहा हूं। ऐसा प्रतीत होता है कि सेटप्टोल्स 31 ने हमारी प्रजनन लिपियों के लिए इसे ठीक कर दिया है, और इससे आगे कुछ भी नहीं है कि यहां पाइप कुछ भी नहीं कर सकता है।

@jonparrott
Https://github.com/jonparrott/namespace-pkg-tests/blob/master/table.md पर परिणाम प्राप्त करने के लिए पाइप और सेटपूल के किन संस्करणों का उपयोग किया गया था?

@dstufft जबकि मैं सराहना करता हूं कि यह निश्चित रूप से तय है, मैं @jonparrott की संगतता तालिका को फिर से सबूत के रूप में देखना

@Jonparrott के उदाहरणों में, विफल होने वाले मामलों को " python setup.py install सीधे (Python 2 पर PEP 420 विफलताओं को छोड़कर) का उपयोग करके" " समाप्त किया जा सकता है। यह उन मामलों में भी विफल हो रहा है जहां पाइप शामिल नहीं है। बिल्कुल भी (जैसे python setup.py install + python setup.py develop )।

यह टिकट pip install . और pip install -e या python setup.py develop के संयोजन के लिए था।

@Jonparrott द्वारा पहले से पोस्ट किया गया बताता है कि यह टिकट हल हो गया है और यहां कोई भी शेष समस्या python setup.py install साथ एक मुद्दा है, न कि पाइप के साथ।

मैंने अपने परीक्षणों को फिर से चलाया और सब कुछ वैसा ही है जैसा मैंने शुरू में चलाया था। मैं @dstufft के आकलन से सहमत हूं - पाइप ने इसे हल करने के लिए सब कुछ किया है।

@ piotr-dobrogost परीक्षण दोनों के नवीनतम संस्करणों का उपयोग करता है। इस लेखन के रूप में, पाइप 9.0.1 और सेटप्टूल 34.3.2।

क्या यह पृष्ठ उपयोगी था?
0 / 5 - 0 रेटिंग्स