Python使用不同的数据目录打包多个子包

时间:2017-12-20 03:48:01

标签: python pip setuptools packaging python-packaging

我有一个目录结构,foobaralphabet数据目录以及代码something.py

\mylibrary
    \packages
         \foobar
             foo.zip
             bar.zip
         \alphabet
             abc.zip
             xyz.zip
          something.py
     setup.py

目标是用户可以这样安装模块:

pip install mylibrary[alphabet]

而且只包含来自packages/alphabet/*数据和python代码的数据。类似的行为应该适用于pip install mylibrary[foobar]

如果用户安装时没有规范:

pip install mylibrary

然后它将包含packages/下的所有数据目录。

目前,我已尝试用Python3.5编写setup.py

import glob
from setuptools import setup, find_packages


setup(
  name = 'mylibrary',
  packages = ['packages'],
  package_data={'packages':glob.glob('packages' + '/**/*.txt', recursive=True)},
)

当用户执行pip install mylibrary时,这将创建包含所有数据目录的分发。

我应该如何更改setup.py,以便可以安装pip install mylibrary[alphabet]之类的特定点数?

1 个答案:

答案 0 :(得分:0)

首先,您必须打包并发布alphabetfoobar作为单独的包,pip install mylibrary[alphabet]表示

pip install mylibrary
pip install alphabet

之后,将alphabetfoobar添加为extras

setup(
    …,
    extras = {
        'alphabet': ['alphabet'],
        'foobar': ['foobar'],
    }
)

字典中的键是pip install mylibrary[EXTRA_NAME]中使用的名称,值是将从PyPI安装的包名列表。

PS。不,你不能使用额外的东西安装一些不能作为PyPI包提供的数据文件。