【问题标题】:Distributing multiple packages using setup.py for Python使用 setup.py for Python 分发多个包
【发布时间】:2017-08-09 03:34:13
【问题描述】:

我正在尝试设置一些 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 = 'rob.marshall17@gmail.com',
      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。并不是说这很悲惨,但我想知道是否有更好的方法来做到这一点。

谢谢,

罗伯

【问题讨论】:

    标签: python packages setuptools


    【解决方案1】:

    我可能已经回答了我自己的问题:如果我修改 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
    |    |    |-...
    

    如果我然后 cd 进入 package1 并执行以下操作:

    % python setup.py sdist
    

    它似乎正确地创建了分布。

    罗伯

    【讨论】:

    • 如果我使用自动工具,我应该创建那些符号链接吗?
    • @Rob 如果您在子包中使用不同的构建系统,它会起作用吗?
    • 我希望我能在这里得到一个遮阳篷,但是你的结构 package1 包括另一个文件夹 package1 似乎不是很好的结构。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-12-09
    • 1970-01-01
    • 2018-04-05
    • 1970-01-01
    • 2015-05-27
    相关资源
    最近更新 更多