Das deutsche Python-Forum

Diskussionen rund um die Programmiersprache Python
Aktuelle Zeit: Fr Sep 03, 2010 02:03

Alle Zeiten sind UTC + 1 Stunde [ Sommerzeit ]




Ein neues Thema erstellen Auf das Thema antworten  [ 12 Beiträge ] 
Autor Nachricht
 Betreff des Beitrags: Per CGI herrausfinden, welche Module existieren...
BeitragVerfasst: Fr Aug 19, 2005 15:00 
Moderator

Registriert: Di Aug 10, 2004 10:40
Beiträge: 6153
Wohnort: duisburg
Ich hatte mir vor einiger Zeit ein Modul geschrieben, um zu testen welche Python Module auf dem Webserver zu verfügung stehen. Das Prinzip war einfach, ich habe eine Liste von Modulenamen geschrieben und mein Skript hat einfach versucht die Module zu importieren...

Aber es muß doch eigentlich eine einfachere Methode geben, welche Module so alles verfügbar sind, oder?

Schön wäre es, wenn man dabei unterscheiden könnte, ob es ein Python "internes" Modul ist, oder ein zusätzlich installiertes...

_________________

- Python CMS: http://www.pylucid.org
- Mein ohloh Profil


Nach oben
 Profil  
 
 Betreff des Beitrags: Re: Per CGI herrausfinden, welche Module existieren...
BeitragVerfasst: Fr Aug 19, 2005 18:50 
User

Registriert: Sa Apr 09, 2005 11:58
Beiträge: 210
jens hat geschrieben:
Ich hatte mir vor einiger Zeit ein Modul geschrieben, um zu testen welche Python Module auf dem Webserver zu verfügung stehen. Das Prinzip war einfach, ich habe eine Liste von Modulenamen geschrieben und mein Skript hat einfach versucht die Module zu importieren...

Aber es muß doch eigentlich eine einfachere Methode geben, welche Module so alles verfügbar sind, oder?

Ich fürchte, es gibt keine. Erst, wenn du versuchst, ein Modul zu importieren, sucht Python nach dem Modul und lädt es. Vorher weis Python von externen Modulen garnix. Als Möglichkeit, kannst du natürlich den Lib ordner von Python durchsuchen. Da sind dann alle Module drinn.

jens hat geschrieben:
Schön wäre es, wenn man dabei unterscheiden könnte, ob es ein Python "internes" Modul ist, oder ein zusätzlich installiertes...

Das kannst du, soweit ich weis, nur herausfinden, indem du schaust, ob das Modul im site-packages Verzeichniss liegt, oder nicht.


Nach oben
 Profil  
 
 Betreff des Beitrags: Re: Per CGI herrausfinden, welche Module existieren...
BeitragVerfasst: Fr Aug 19, 2005 19:22 
Administrator
Benutzeravatar

Registriert: Fr Jun 20, 2003 17:30
Beiträge: 13867
ProgChild hat geschrieben:
Als Möglichkeit, kannst du natürlich den Lib ordner von Python durchsuchen. Da sind dann alle Module drinn.

Am besten gleich den kompletten PYTHONPATH, da dir sonst etwas entgehen könnte.

_________________
My god, it's full of CARs!


Nach oben
 Profil  
 
 Betreff des Beitrags:
BeitragVerfasst: Fr Aug 19, 2005 19:54 
Moderator

Registriert: Di Aug 10, 2004 10:40
Beiträge: 6153
Wohnort: duisburg
Interessant... Werde ich mal versuchen... Aber was alles ist ein Python Modul? Alle *.py, *.pyc, *.pyd und *.pyo sind schon mal verdächtig ;)

_________________

- Python CMS: http://www.pylucid.org
- Mein ohloh Profil


Nach oben
 Profil  
 
 Betreff des Beitrags:
BeitragVerfasst: Fr Aug 19, 2005 20:26 
Administrator
Benutzeravatar

Registriert: Fr Jun 20, 2003 17:30
Beiträge: 13867
*.so unter Linux auch. Und Achtung auf *.pth Dateien, diese erweitern auch den Pfad.

_________________
My god, it's full of CARs!


Nach oben
 Profil  
 
 Betreff des Beitrags:
BeitragVerfasst: Fr Aug 19, 2005 20:35 
User

Registriert: Sa Apr 09, 2005 11:58
Beiträge: 210
Leonidas hat geschrieben:
*.so unter Linux auch. Und Achtung auf *.pth Dateien, diese erweitern auch den Pfad.

Es kann aber auch sein, dass im PYTHONPATH .so Dateien liege, die gar keine Python Module sind. Du solltest vielleicht noch zur sicherheit testen, ob sich das Modul auch wirklich importieren lässt.


Nach oben
 Profil  
 
 Betreff des Beitrags:
BeitragVerfasst: Fr Aug 19, 2005 23:40 
Moderator

Registriert: Di Aug 10, 2004 10:40
Beiträge: 6153
Wohnort: duisburg
Danke für die Tips... Ich hab mal was probiert...

Das Testen mit __import__() ist allerdings keine gute Idee, weil das Modul direkt ausgeführt wird, wie z.B. __import__("this") ;-)
Eine bessere varinate ist imp.find_module( name ) das schaut nur nach, ob das Modul vorhanden ist...

Hier mal ein Schnellschuss:

Code:
#!/usr/bin/python
# -*- coding: UTF-8 -*-

import cgitb;cgitb.enable()
import os, sys, glob, imp

print "Content-type: text/html; charset=utf-8\r\n"
print "<pre>"


class modules:
    def __init__( self ):
        filelist = self.scan()
        modulelist = self.test( filelist )
        self.print_result( modulelist )

    def get_suffixes( self ):
        suffixes = ["*"+i[0] for i in imp.get_suffixes()]
        suffixes = "[%s]" % "|".join(suffixes)
        return suffixes

    def get_files( self, path ):
        files = []
        for suffix in self.get_suffixes():
            searchstring = os.path.join( path, suffix )
            files += glob.glob(searchstring)
        return files

    def scan( self ):
        filelist = []
        pathlist = sys.path
        for path_item in pathlist:
            if not os.path.isdir( path_item ):
                continue

            for file in self.get_files( path_item ):
                file = os.path.split( file )[1]
                if file == "__init__.py":
                    continue

                filename = os.path.splitext( file )[0]

                if filename in filelist:
                    continue
                else:
                    filelist.append( filename )

        return filelist

    def test( self, filelist ):
        modulelist = []
        for filename in filelist:
            try:
                imp.find_module( filename )
            except:
                continue
            modulelist.append( filename )
        return modulelist

    def print_result( self, modulelist ):
        modulelist.sort()
        print "="*80
        for modulename in modulelist:
            print modulename
        print "="*80
        print len( modulelist )

modules()

print "-"*80
print "fertig"
 

_________________

- Python CMS: http://www.pylucid.org
- Mein ohloh Profil


Nach oben
 Profil  
 
 Betreff des Beitrags:
BeitragVerfasst: Fr Aug 19, 2005 23:46 
Administrator
Benutzeravatar

Registriert: Fr Jun 20, 2003 17:30
Beiträge: 13867
Was soll das eigentlich werden? Eine Art configure?

_________________
My god, it's full of CARs!


Nach oben
 Profil  
 
 Betreff des Beitrags:
BeitragVerfasst: Fr Sep 02, 2005 07:47 
Moderator

Registriert: Di Aug 10, 2004 10:40
Beiträge: 6153
Wohnort: duisburg
Leonidas hat geschrieben:
Was soll das eigentlich werden? Eine Art configure?


Nein, ich will nur wissen, welche Module verfügbar sind, mehr nicht ;)

Im übrigen kam gerade über die "Daily Python-URL" was rein: http://aspn.activestate.com/ASPN/Cookbo ... ipe/440501 Soll genau das gleiche machen, was ich will...

EDIT: Hab's gerade ausprobiert... Funktioniert allerdings nicht wirklich gut. In dem Recipe wird mit imp.load_module() gearbeitet. Das ist das selbe Problem wie mit __import__(): Dabei wird der __main__-Teil eines Moduls "aktiviert". Da ich mehrere Testskripte hab, in den das so ist, gibt's eine menge unbrauchbarer Ausgaben ;)
Also muß ich doch meine Variante nehmen ;)

_________________

- Python CMS: http://www.pylucid.org
- Mein ohloh Profil


Nach oben
 Profil  
 
 Betreff des Beitrags:
BeitragVerfasst: Mi Okt 11, 2006 20:09 
Moderator

Registriert: Di Aug 10, 2004 10:40
Beiträge: 6153
Wohnort: duisburg
Eine neue Version als CGI ist hier zu finden:
https://opensvn.csie.org/traccgi/PyLuci ... le_info.py

_________________

- Python CMS: http://www.pylucid.org
- Mein ohloh Profil


Nach oben
 Profil  
 
 Betreff des Beitrags:
BeitragVerfasst: Mi Okt 11, 2006 20:33 
User

Registriert: Sa Sep 23, 2006 00:05
Beiträge: 1454
Wohnort: ja
Sowas? http://online.effbot.org/#listmodules-cgi


Nach oben
 Profil  
 
 Betreff des Beitrags:
BeitragVerfasst: Do Okt 12, 2006 10:55 
Moderator

Registriert: Di Aug 10, 2004 10:40
Beiträge: 6153
Wohnort: duisburg
Ist was ähnliches... Mein Modul spuckt allerdings zu jedem Modul noch ein wenig Info aus :)

Probiere es mal aus :)

_________________

- Python CMS: http://www.pylucid.org
- Mein ohloh Profil


Nach oben
 Profil  
 
Beiträge der letzten Zeit anzeigen:  Sortiere nach  
Ein neues Thema erstellen Auf das Thema antworten  [ 12 Beiträge ] 

Alle Zeiten sind UTC + 1 Stunde [ Sommerzeit ]


Wer ist online?

Mitglieder in diesem Forum: Yahoo [Bot]


Du darfst keine neuen Themen in diesem Forum erstellen.
Du darfst keine Antworten zu Themen in diesem Forum erstellen.
Du darfst deine Beiträge in diesem Forum nicht ändern.
Du darfst deine Beiträge in diesem Forum nicht löschen.

Suche nach:
Gehe zu:  
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Deutsche Übersetzung durch phpBB.de