2014-08-30 12 views
6

: Kullanıcı site paketleri dizin durumunu gösterenBir site için site.ENABLE_USER_SITE` nasıl devre dışı bırakılır? <a href="https://docs.python.org/3.3/library/site.html#site.ENABLE_USER_SITE">the docs</a> itibaren

site.ENABLE_USER_SITE

Bayrağı. True, etkin olduğunu ve sys.path'a eklendiği anlamına gelir. False, kullanıcı isteği ile devre dışı bırakıldığı anlamına gelir (-s veya PYTHONNOUSERSITE ile). Hiçbiri, güvenlik nedeniyle (kullanıcı veya grup kimliği ve etkin kimlik arasındaki uyumsuzluk) veya bir yönetici tarafından devre dışı bırakıldığı anlamına gelir.

Özellikle veya bir yönetici tarafından () ilgileniyorum. Yönetici olduğum makinelerde (yani kendi başıma), belirli bir tercüman uygulaması için bu seçeneği global olarak nasıl devre dışı bırakırım?

ben bunu yapmak istiyorum sebebi yeni Conda ortamlar bu etkin bırakın şudur: https://github.com/conda/conda/issues/448

cevap

6
o değişkenin değeri Python code tamamen belirlenir

:

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 

ilk test için basitçe -s anahtar veya PYTHONNOUSERSITE ortam değişkeni kullanıldı. None, etkili userid veya groupid işlem userid veya groupid işleminden farklıysa, geriye dönen testlerdir. Bir yönetici set the effective user id or group id bits numaralı bir yönetici olabilir; bu noktada, uygulamanın etkin kullanıcısı Python'u yürüten kullanıcı yerine yürütülebilir veya kullanıcı grubuna dönüştürülür; bu durumda yukarıdaki işlev None döndürür. Bunun dışında bir sitecustomize.py paketi None değerini tekrar ayarlayabilir ve kullanıcı dizinlerini yeniden yoldan kaldırabilir. Öyleyse, usercustomize.py içe aktarma adımı atlanır.

+0

Evet, bunu gördüm. Dokümanlar başka bir yol olduğunu ima ediyor gibi görünüyor: "Hiçbiri, güvenlik nedenleriyle (kullanıcı veya grup kimliği ile etkili kimlik arasındaki uyumsuzluk) * veya * bir yönetici tarafından devre dışı bırakıldığı anlamına gelir." Bu, kullanıcı/grup kimliğini değiştirmenin başka bir yolu olduğunu ima eder. – ontologist

+0

@ontologist: Yukarıdaki uygulama aslında gerçekleşecek olan şeydir. Etkin kullanıcı/grup bitlerini ayarlamak bir yönetici eylem olduğundan, belgelemenin (etkisiz) ima ettiği şey olduğunu düşünüyorum. –

+0

Evet, durum böyle olabilir. Bununla birlikte, bu çözümlerin hiçbiri çok uygun değildir. Ortam değişkenleri, yorumlayıcıya özgü değildir, her zaman bir komut satırı bayrağı kullanmak hassastır ve kullanıcı/grup kimliğini değiştirmenin başka etkileri vardır. – ontologist

İlgili konular