2016-05-31 5 views
0

私は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__) 
+1

何をお見せください。試したことがあります。 –

+0

@BryanOakley私はそれが私がそれを望んでいたようにほとんどうまくいかなかったので私がまだ試したことを示していないし、私はこのポストの応答を接線にしたくありませんでした。 – mcchucklezz

+2

しないでください: '__all__'動的にしないでください。単純に*明示的に*モジュールからエクスポートする関数と変数を指定します。 – Evert

答えて

1

あなたが与えられたディレクトリの__init__.pyファイルを持つすべての.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 
関連する問題