47 lines
		
	
	
		
			1.2 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
			
		
		
	
	
			47 lines
		
	
	
		
			1.2 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
"""Recursively load pth files in site-packages of sys.path
 | 
						|
 | 
						|
- iterate over sys.path
 | 
						|
- check for pth in dirs that end in site-packages
 | 
						|
- ignore import statements in pth files
 | 
						|
- add dirs listed in pth files right after current sys.path element,
 | 
						|
  they will be processed in next iteration
 | 
						|
"""
 | 
						|
 | 
						|
import os
 | 
						|
import site
 | 
						|
import sys
 | 
						|
 | 
						|
 | 
						|
for path_idx, sitedir in enumerate(sys.path):
 | 
						|
    # ignore non-site-packages
 | 
						|
    if not sitedir.endswith('site-packages'):
 | 
						|
        continue
 | 
						|
 | 
						|
    # find pth files
 | 
						|
    try:
 | 
						|
        names = os.listdir(sitedir)
 | 
						|
    except os.error:
 | 
						|
        continue
 | 
						|
    dotpth = os.extsep + "pth"
 | 
						|
    pths = [name for name in names if name.endswith(dotpth)]
 | 
						|
 | 
						|
    for pth in pths:
 | 
						|
        fullname = os.path.join(sitedir, pth)
 | 
						|
        try:
 | 
						|
            f = open(fullname, "rU")
 | 
						|
        except IOError:
 | 
						|
            continue
 | 
						|
 | 
						|
        with f:
 | 
						|
            for n, line in enumerate(f):
 | 
						|
                if line.startswith("#"):
 | 
						|
                    continue
 | 
						|
 | 
						|
                if line.startswith(("import ", "import\t")):
 | 
						|
                    continue
 | 
						|
 | 
						|
                line = line.rstrip()
 | 
						|
                dir, dircase = site.makepath(sitedir, line)
 | 
						|
                if not dircase in sys.path:
 | 
						|
                    sys.path.insert(path_idx+1, dir)
 |