Я пишу диспетчер пакетов python, и я делаю это так, чтобы он генерировал объект __all__
на основе программ/пакетов в текущем каталоге, но я также хочу игнорировать любые не-пакеты. то есть, если я имел следующую структуру каталогов:Получить все файлы и каталоги в текущем каталоге python
project
|------__init__.py
|------prog1.py
|------package
|------__init__.py
|------prog2.py
|------resources
|------ping.png
Я хочу, чтобы переменная __all__
быть следующим:
__all__ = ['prog1', 'package']
Я пробовал различные вещи, но честно говоря, я понятия не имею, что я делаю.
Это то, что я пытался в прошлом:
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__)
Пожалуйста, показать, что вы «Пробовал, и какую документацию вы прочитали. –
@BryanOakley Я еще не показывал, что я пробовал, потому что он не работал почти так, как я этого хотел, и я не хотел, чтобы ответы на этом посту были касательными. – mcchucklezz
Не делайте этого: не делайте динамику '__all__'. Просто * явно * укажите, какие функции и переменные вы хотите экспортировать из модуля. – Evert