Path: csiph.com!v102.xanadu-bbs.net!xanadu-bbs.net!feeder.erje.net!eu.feeder.erje.net!feeds.phibee-telecom.net!newsfeed.xs4all.nl!newsfeed3.news.xs4all.nl!xs4all!post.news.xs4all.nl!not-for-mail Return-Path: X-Original-To: python-list@python.org Delivered-To: python-list@mail.python.org X-Spam-Status: OK 0.002 X-Spam-Evidence: '*H*': 1.00; '*S*': 0.00; 'matches': 0.07; 'subject:Getting': 0.07; "'.'": 0.09; 'imported': 0.09; 'subject:modules': 0.09; 'cc:addr:python-list': 0.11; 'python': 0.11; 'def': 0.12; "'':": 0.16; '(it': 0.16; '.py': 0.16; 'imported.': 0.16; 'modules.': 0.16; 'programmatic': 0.16; 'set()': 0.16; 'sys.path:': 0.16; 'to:addr:pearwood.info': 0.16; "to:name:steven d'aprano": 0.16; 'extensions': 0.16; 'wrote:': 0.18; 'wed,': 0.18; 'packages.': 0.19; 'import': 0.22; 'cc:addr:python.org': 0.22; 'cc:2**0': 0.24; 'cc:no real name:2**0': 0.24; 'header:In-Reply-To:1': 0.27; 'function': 0.29; "doesn't": 0.30; 'subject:list': 0.30; 'message- id:@mail.gmail.com': 0.30; "i'm": 0.30; 'url:mailman': 0.30; 'base,': 0.31; "d'aprano": 0.31; 'steven': 0.31; 'anyone': 0.31; 'file': 0.32; 'probably': 0.32; 'subject:all': 0.32; 'url:python': 0.33; 'could': 0.34; 'problem': 0.35; 'but': 0.35; 'received:google.com': 0.35; 'ext': 0.36; 'url:listinfo': 0.36; 'url:org': 0.36; 'half': 0.37; 'wrong': 0.37; 'list': 0.37; 'skip:o 20': 0.38; 'system,': 0.38; 'handle': 0.38; 'files': 0.38; 'pm,': 0.38; 'does': 0.39; 'url:mail': 0.40; 'how': 0.40; 'skip:u 10': 0.60; 'issues,': 0.61; 'name': 0.63; 'zip': 0.64; '30,': 0.65; 'jul': 0.74; 'leo': 0.84 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113; h=mime-version:in-reply-to:references:date:message-id:subject:from:to :cc:content-type; bh=0fn/kH7I7Cxyn4mohcshzze0YebtsNEzDVCtTKJTZVY=; b=YzLfILzRhvtI0sdEpTP0D9+gQgBMNYCz9qDr1aT+kzLRRFojpBCPLWHIehNQADph+F 7Kul2MnVcFlFu67ZoQM0GL0D1cR/fMBZiFtkcdGN3dw+E/Jj0VBLZXEdfezpo2VILj0Y qgH9h0Uw7Gzd6Pzino/Z06uU6XDqwHTj6JMcAweRbNwgxST4L6llBaiCrMRvplkB434o OxEhHHUi9EHcTo8TjmJNqJQbkRv456czNEzQQHXMuDnfETmJV8y/BBxUMsEnuZ/8YvVl 8tjqE0HxCVWM1aHvzgwN/B1TVx7xG6mNn2zYcalR3i0Rlj3G0bQVoqMEIYQTO03Dz5/q KMEQ== MIME-Version: 1.0 X-Received: by 10.52.244.81 with SMTP id xe17mr7792934vdc.24.1406726538638; Wed, 30 Jul 2014 06:22:18 -0700 (PDT) In-Reply-To: <53d8a20e$0$29977$c3e8da3$5496439d@news.astraweb.com> References: <53d8a20e$0$29977$c3e8da3$5496439d@news.astraweb.com> Date: Wed, 30 Jul 2014 21:22:18 +0800 Subject: Re: Getting a list of all modules From: Leo Jay To: "Steven D'Aprano" Content-Type: text/plain; charset=UTF-8 Cc: python-list@python.org X-BeenThere: python-list@python.org X-Mailman-Version: 2.1.15 Precedence: list List-Id: General discussion list for the Python programming language List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Newsgroups: comp.lang.python Message-ID: Lines: 46 NNTP-Posting-Host: 2001:888:2000:d::a6 X-Trace: 1406726547 news.xs4all.nl 2921 [2001:888:2000:d::a6]:42826 X-Complaints-To: abuse@xs4all.nl Xref: csiph.com comp.lang.python:75372 On Wed, Jul 30, 2014 at 3:43 PM, Steven D'Aprano wrote: > I'm looking for a programmatic way to get a list of all Python modules > and packages. Not just those already imported, but all those which > *could* be imported. > If you don't actually import it, how can you know it could be imported? Not all .so files are valid python modules. Not all .py files could be imported by all python interpreters. > I have a quick-and-dirty function which half does the job: > > > def get_modules(): > extensions = ('.py', '.pyc', '.pyo', '.so', '.dll') > matches = set() > for location in sys.path: > if location == '': location = '.' > if os.path.isdir(location): > for name in os.listdir(location): > base, ext = os.path.splitext(name) > if ext in extensions: > matches.add(base) > return sorted(matches) > > > > but I know it's wrong (it doesn't handle packages correctly, or zip > files, doesn't follow .pth files, has a very naive understanding of cross- > platform issues, fails to include built-in modules that don't live in the > file system, and probably more). > > Is this problem already solved? Can anyone make any suggestions? > > > > -- > Steven > -- > https://mail.python.org/mailman/listinfo/python-list -- Best Regards, Leo Jay