我正在编写一个python包管理器,我正在创建它,以便它根据当前目录中的程序/包生成__all__
对象,但我也想忽略任何非包。
即,如果我有以下目录结构:
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__)
答案 0 :(得分:1)
您希望所有.py文件和具有给定目录的__init__.py
文件的所有目录都使用glob
:
def config_all(directory):
result = []
for filename in glob.iglob(os.path.join(directory, '*', '__init__.py')):
result.append(os.path.basename(os.path.dirname(filename))
for filename in glob.iglob(os.path.join(directory, '*.py'):
result.append(os.path.splitext(os.path.basename(filename))[0])
return result