2014-08-30 7 views
6

the docs से:किसी पर्यावरण के लिए `site.ENABLE_USER_SITE` को अक्षम कैसे करें?

site.ENABLE_USER_SITE

उपयोगकर्ता साइट-संकुल निर्देशिका की स्थिति दिखा करें। True मतलब है कि यह सक्षम है और sys.path को जोड़ा गया है। False मतलब है कि यह (-s या PYTHONNOUSERSITE के साथ) उपयोगकर्ता अनुरोध द्वारा अक्षम किया गया था। इसका कोई मतलब नहीं है कि इसे सुरक्षा कारणों से अक्षम किया गया था (उपयोगकर्ता या समूह आईडी और प्रभावी आईडी के बीच मेल नहीं खाता) या व्यवस्थापक द्वारा।

मैं विशेष रूप से वाक्यांश में या किसी व्यवस्थापक द्वारा इच्छुक हूँ। मशीनों पर जिन पर मैं एक प्रशासक हूं (यानी मेरा खुद का), मैं एक विशिष्ट दुभाषिया निष्पादन योग्य के लिए वैश्विक स्तर पर इस विकल्प को कैसे अक्षम कर सकता हूं?

कारण मैं ऐसा करना चाहते हैं कि नए conda वातावरण यह सक्षम छोड़ दें: https://github.com/conda/conda/issues/448

उत्तर

6

कि चर का मान Python code में पूरी तरह से निर्धारित किया जाता है:

def check_enableusersite(): 
    """Check if user site directory is safe for inclusion 

    The function tests for the command line flag (including environment var), 
    process uid/gid equal to effective uid/gid. 

    None: Disabled for security reasons 
    False: Disabled by user (command line option) 
    True: Safe and enabled 
    """ 
    if sys.flags.no_user_site: 
     return False 

    if hasattr(os, "getuid") and hasattr(os, "geteuid"): 
     # check process uid == effective uid 
     if os.geteuid() != os.getuid(): 
      return None 
    if hasattr(os, "getgid") and hasattr(os, "getegid"): 
     # check process gid == effective gid 
     if os.getegid() != os.getgid(): 
      return None 

    return True 

पहले टेस्ट के लिए बस है -s स्विच या PYTHONNOUSERSITE वातावरण चर प्रयोग किया गया है।

क्या रहता परीक्षण है कि अगर प्रभावी userid None वापसी या प्रक्रिया userid या ग्रुप से अलग ग्रुप है।

एक व्यवस्थापक set the effective user id or group id bits कर सकता है, जिस बिंदु पर निष्पादन योग्य का प्रभावी उपयोगकर्ता उपयोगकर्ता को पाइथन निष्पादित करने के बजाए निष्पादन योग्य के मालिक या समूह में बदल दिया जाता है, जिस बिंदु पर उपरोक्त फ़ंक्शन None वापस आ जाएगा।

उसके अलावा, एक sitecustomize.py पैकेज None के लिए मूल्य फिर से सेट कर सकते हैं, और स्पष्ट रूप से फिर से पथ से उपयोगकर्ता निर्देशिका को हटा दें। यदि ऐसा है, तो usercustomize.py आयात चरण छोड़ दिया गया है।

+0

हाँ, मैं में देखा। दस्तावेज़ों का अर्थ यह है कि एक और तरीका है: "कोई भी मतलब नहीं है कि इसे सुरक्षा कारणों से (उपयोगकर्ता या समूह आईडी और प्रभावी आईडी के बीच मेल नहीं खाता) * या * व्यवस्थापक द्वारा अक्षम किया गया था।" इसका मतलब है कि उपयोगकर्ता/समूह आईडी को बदलने के अलावा एक और तरीका है। – ontologist

+0

@ संयोजक: उपरोक्त कार्यान्वयन वास्तव में होने वाला है। प्रभावी उपयोगकर्ता/समूह बिट्स सेट करने के बाद से एक व्यवस्थापक कार्रवाई है, मुझे लगता है कि दस्तावेज (अप्रभावी रूप से) है जो संकेत देता है। –

+0

हां, यह मामला हो सकता है। हालांकि, इनमें से कोई भी समाधान बहुत सुविधाजनक नहीं है। पर्यावरण परिवर्तक दुभाषिया-विशिष्ट नहीं हैं, हमेशा कमांड लाइन ध्वज का उपयोग नाजुक है, और उपयोगकर्ता/समूह आईडी को बदलने से अन्य प्रभाव पड़ते हैं। – ontologist

संबंधित मुद्दे