web-dev-qa-db-ja.com

Pythonのsetup.pyを使用して複数のパッケージを配布する

「ユーティリティ」の共通セットを共有するが、個別の「パッケージ」として配布できるようにする必要があるいくつかのPythonパッケージをセットアップしようとしています。以下の構造を想定します。

/packages
    |-setup.py
    |-__init__.py
    |-MANIFEST.in
    |-com
    |    |-__init__.py
    |    |-company
    |    |    |-__init__.py
    |    |    |-subdir1
    |    |    |    |-__init__.py
    ...
    |-utilities
    |    |-__init__.py
    |    |-utils1.py
    |    |-utils2.py
    |    |-...
    |-package1
    |    |-__init__.py
    |    |-package1_1.py
    |    |-package1_2.py
    |    |-...
    |-package2
    |    |-__init__.py
    |    |-package2_1.py
    |    |-package2_2.py
    |    |-...

Setup.pyを使用して、package1またはpackage2をビルドできるようにしたいと思います。どちらにも同じユーティリティを含める必要があります。

私が見つけたすべてのチュートリアルは、単一のsetup.pyをかなり簡単に使用できる単純な単一のプロジェクトを使用しています。しかし、どうすれば同じディレクトリ(gitリポジトリ)の構造から複数の異なるパッケージを作成できますか?現時点では、package1_setup.pyを使用して、次のようなpackage1をビルドしています。

from setuptools import setup,find_packages
import sys, os

version = '0.1'

setup(name = 'package1',
      version = version,
      description = 'Package 1',
      author = 'Rob Marshall',
      author_email = '[email protected]',
      url = None,
      packages = ["package1","utils","com"],
      include_package_data = True,
      Zip_safe = False,
      entry_points = {
                      'console_scripts':[
                                         'tool1 = package1.package1_1:main',
                                         'tool2 = package1.package1_2:main',
                                         ],
                      },
      install_requires = [
                          'boto >= 2.40',
                          'python-swiftclient >= 3.2.0',
                          'fabric >= 1.13.0',
                          ],
      )

したがって、package1をビルドする場合は、次のようにします。

% python package1_setup.py sdist

これは、インストール可能なソースパッケージを作成しますが、setup.pyがpackage1_setup.pyと呼ばれるため、多少「扱いにくい」ものです。それは悲劇的なことではありませんが、これを行うためのより良い方法があるかどうか私は思っていました。

おかげで、

ロブ

14
Rob Marshall

私自身の質問に答えた可能性があります:使用するようにsetup.pyを変更した場合:

packages = find_packages(),

そして、ディレクトリ構造を次のように変更します。

...
|-package1
|    |-setup.py
|    |-MANIFEST.in
|    |-com (symlink to ../com)
|    |-utilities (symlink to ../utilities)
|    |-package1
|    |    |-__init__.py
|    |    |-package1_1.py
|    |    |-package1_2.py
|    |    |-...

次に、package1にcdして次のようにします。

% python setup.py sdist

ディストリビューションが正しく作成されているようです。

ロブ

6
Rob Marshall