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

问题描述 投票:0回答:1

我有一个目录的结构与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]这样的特定pip安装是可能的?

python pip setuptools packaging python-packaging
1个回答
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包提供的数据文件。

© www.soinside.com 2019 - 2024. All rights reserved.