我有一个目录结构,foobar
和alphabet
数据目录以及代码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]
之类的特定点数?
答案 0 :(得分:0)
首先,您必须打包并发布alphabet
和foobar
作为单独的包,pip install mylibrary[alphabet]
表示
pip install mylibrary
pip install alphabet
之后,将alphabet
和foobar
添加为extras
:
setup(
…,
extras = {
'alphabet': ['alphabet'],
'foobar': ['foobar'],
}
)
字典中的键是pip install mylibrary[EXTRA_NAME]
中使用的名称,值是将从PyPI安装的包名列表。
PS。不,你不能使用额外的东西安装一些不能作为PyPI包提供的数据文件。