2016-05-20 10 views
4

私はsetup.pyというファイルを持っています。ユーザがsetuptoolsを持っているかどうかをチェックし、そうでなければdistutilsを使用します。事はサブモジュールがインストールされていることを確認する、ということですが、私はsetuptools 'が見つかりパッケージを使用します。distutilsはsetuptoolsの `find_packages`に相当するものは何ですか? (Python)

from setuptools import setup, find_packages 
packages = find_packages() 

をして、そこから進みます。

しかし、私はdistutilsでそれを行う方法がわかりません。同等の機能はありますか、または__init__.pyがあるサブディレクトリを手動で探す必要がありますか?その場合、私のパッケージをインストールするのにsetuptoolsを要求し、ただdistutilsを忘れることは許されますか?

乾杯。

答えて

5

setuptoolsを使用することは完全に受け入れられます。 PyPI上のパッケージの大半は既にあります。

find_packages()ホイールを再作成する場合は、yes、__init__.pyのファイルがあるディレクトリを探します。これがsetuptools.PackageFinder classの機能です。単純化された再実装は次のようになります。

import os 
from distutils.util import convert_path 


def find_packages(base_path): 
    base_path = convert_path(base_path) 
    found = [] 
    for root, dirs, files in os.walk(base_path, followlinks=True): 
     dirs[:] = [d for d in dirs if d[0] != '.' and d not in ('ez_setup', '__pycache__')] 
     relpath = os.path.relpath(root, base_path) 
     parent = relpath.replace(os.sep, '.').lstrip('.') 
     if relpath != '.' and parent not in found: 
      # foo.bar package but no foo package, skip 
      continue 
     for dir in dirs: 
      if os.path.isfile(os.path.join(root, dir, '__init__.py')): 
       package = '.'.join((parent, dir)) if parent else dir 
       found.append(package) 
    return found 

これはsetuptools.find_packages()includeexclude引数を無視します。

関連する問題