2017-03-17 1 views
4

J'essaie de configurer des paquets Python qui partageront un ensemble commun d'utilitaires, mais devront être capables de les distribuer en tant que "paquets" séparés. Supposons que la structure suivante:Distribution de plusieurs paquets à l'aide de setup.py pour 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 
    | |-... 

Je voudrais pouvoir utiliser setup.py pour la construction soit package1 ou Package2 deux qui devrait inclure les mêmes services publics.

Tous les tutoriels que j'ai trouvés utilisent un simple projet simple qui rend l'utilisation d'un seul fichier setup.py assez simple. Mais comment créer plusieurs paquets différents à partir du même répertoire (c'est un référentiel git)? En ce moment, j'utilise package1_setup.py pour construire package1 qui ressemble à:

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', 
          ], 
    ) 

Alors, quand je veux construire package1 que je fais:

% python package1_setup.py sdist 

Ce qui crée un paquet source installable mais quelque peu "gênant" car le fichier setup.py s'appelle package1_setup.py. Ce n'est pas tragique, mais je me demandais s'il y avait une meilleure façon de le faire.

Merci,

Rob

Répondre

3

j'ai répondu à ma propre question: Si je modifie le setup.py à utiliser:

packages = find_packages(), 

et changer la structure de répertoire pour:

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

Si je puis cd dans le paquet1 et faire:

% python setup.py sdist 

Il semble créer correctement la distribution.

Rob