我的python项目通过setup.py
安装。项目结构如下:
├── Makefile
├── README.rst
├── circle.yml
├── docs
│ ├── Makefile
│ ├── conf.py
│ ├── deps.txt
│ ├── guide_installation.rst
│ ├── guide_model.rst
│ ├── guide_transliteration.rst
│ ├── index.rst
│ ├── make.bat
│ └── module_trans.rst
├── indictrans
│ ├── __init__.py
│ ├── _decode
│ ├── _utils
│ ├── base.py
│ ├── iso_code_transformer.py
│ ├── libindic_
│ ├── mappings
│ ├── models
│ ├── polyglot_tokenizer
│ ├── script_transliterate.py
│ ├── test.py
│ ├── tests
│ ├── transliterator.py
│ ├── trunk
│ └── unicode_marks.py
├── requirements.txt
├── setup.cfg
├── setup.py
├── test-requirements.txt
└── tox.ini
子文件夹indictrans/models
的样子
├── ben-eng
│ ├── classes.npy
│ ├── coef.npy
│ ├── intercept_final.npy
│ ├── intercept_init.npy
│ ├── intercept_trans.npy
│ └── sparse.vec
├── ben-guj
│ ├── classes.npy
│ ├── coef.npy
│ ├── intercept_final.npy
│ ├── intercept_init.npy
│ ├── intercept_trans.npy
│ └── sparse.vec
所以我有.npy
和.vec
文件包含在项目中。在我的setup.py
中,我试图通过models
指令明确地包含这个文件夹include_package_data
,如:
setup(
setup_requires=['pbr'],
pbr=True,
packages=find_packages(),
include_package_data=True,
package_data={'models': ['*.npy','*.vec']},
ext_modules=cythonize(extensions)
)
我在setup.cfg
[files]
packages =
indictrans
但运行python setup.py install
不会将models文件夹复制到安装文件夹/usr/local/lib/python2.7/dist-packages/indictrans/
。
如果我打印它是我得到的find_packages
的输出
['indictrans', 'indictrans.tests', 'indictrans.libindic_', 'indictrans._utils', 'indictrans._decode', 'indictrans.polyglot_tokenizer', 'indictrans.models', 'indictrans.trunk', 'indictrans.libindic_.utils', 'indictrans.libindic_.soundex', 'indictrans.libindic_.utils.tests', 'indictrans.libindic_.soundex.utils', 'indictrans.libindic_.soundex.tests', 'indictrans.libindic_.soundex.utils.tests', 'indictrans.polyglot_tokenizer.tests', 'indictrans.trunk.tests']
所以我会假设将包括indictrans/models
,但事实并非如此。
include_package_data=True
添加到你的setup
函数中(你已经这样做了)。MANIFEST.in
所在的目录中创建一个文件setup.py
MANIFEST.in
可以看起来如下:
include indictrans/models/ben-eng/*
include indictrans/models/ben-guj/*
这样做你不需要setup.cfg
。
资料来源:This great writeup of python packaging
编辑关于recursive-include
:根据the documentation,这也应该工作:
recursive-include indictrans/models *.npy *.vec
include_package_data=True
需要MANIFEST.in。
要包含模块indictrans.models
的数据,您必须提供全名:
package_data={'indictrans.models': ['*.npy','*.vec']},