1b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik# (c) 2005 Ian Bicking and contributors; written for Paste (http://pythonpaste.org)
2b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik# Licensed under the MIT license: http://www.opensource.org/licenses/mit-license.php
3b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik
4b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craikimport sys
5b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craikimport os
6b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik
7b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craikdef find_package(dir):
8b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik    """
9b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik    Given a directory, finds the equivalent package name.  If it
10b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik    is directly in sys.path, returns ''.
11b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik    """
12b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik    dir = os.path.abspath(dir)
13b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik    orig_dir = dir
14b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik    path = map(os.path.abspath, sys.path)
15b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik    packages = []
16b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik    last_dir = None
17b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik    while 1:
18b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik        if dir in path:
19b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik            return '.'.join(packages)
20b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik        packages.insert(0, os.path.basename(dir))
21b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik        dir = os.path.dirname(dir)
22b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik        if last_dir == dir:
23b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik            raise ValueError(
24b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik                "%s is not under any path found in sys.path" % orig_dir)
25b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik        last_dir = dir
26b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik
27