Ich schreibe einen Python-Paket-Manager, und ich mache es so, dass es generiert das __all__
Objekt basierend auf den Programmen/Pakete im aktuellen Verzeichnis, aber ich möchte auch ignorieren Nicht-Pakete. dh wenn ich die folgende Verzeichnisstruktur hatte:Holen Sie sich alle Dateien und Verzeichnisse im aktuellen Verzeichnis python
project
|------__init__.py
|------prog1.py
|------package
|------__init__.py
|------prog2.py
|------resources
|------ping.png
Ich möchte die __all__
Variable, die folgenden sein:
__all__ = ['prog1', 'package']
Ich habe verschiedene Dinge ausprobiert, aber ganz ehrlich, ich habe keine Ahnung Was mache ich.
Dies ist, was ich versuchte, zuletzt:
import os
from os import path
def config_all(directory):
__all__ = []
directory = path.abspath(directory)
for root, dirs, files in os.walk(directory, topdown=False):
for d in dirs:
os.chdir("/czar/".join(path.abspath(d).rsplit("/", 1)))
v = list(os.walk('.'))[0][2]
if "__init__.py" in v:
__all__.append(d)
for i in v:
while i in __all__:
__all__.remove(i)
os.chdir('..')
for f in files:
__all__.append(path.join(root, f).rsplit("/", 1)[1].rsplit(".", 1)[0])
return __all__
__all__ = config_all('czar/')
print(__all__)
zeigen Bitte, was Sie habe es versucht, und welche Dokumentation du gelesen hast. –
@BryanOakley Ich habe nicht gezeigt, was ich bisher versucht habe, weil es nicht so funktioniert hat, wie ich es wollte, und ich wollte nicht, dass die Antworten auf diesen Beitrag tangential sind. – mcchucklezz
Tun Sie dies nicht: Machen Sie '__all__' nicht dynamisch. Einfach * explizit * angeben, welche Funktionen und Variablen aus einem Modul exportiert werden sollen. – Evert