【发布时间】:2018-06-02 13:39:38
【问题描述】:
我有一个目录结构,如foobar 和alphabet 数据目录以及代码something.py:
\mylibrary
\packages
\foobar
foo.zip
bar.zip
\alphabet
abc.zip
xyz.zip
something.py
setup.py
目标是用户可以像这样 pip 安装模块:
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?
【问题讨论】:
-
事情是,
setup.py永远不会知道该软件包是安装普通的还是附加的。此信息仅由安装工具(如pip或easy_install)使用,并且永远不会传递给安装脚本。你在安装脚本中定义的extras,粗略地说,只是对安装程序的附加说明:“如果你得到额外的关键字,你应该安装这个包和一束额外的包”,就是这样。
标签: python pip setuptools packaging python-packaging