猿问

使用 setuptools 复制非 .py 文件

我的 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不会将模型文件夹复制到安装文件夹/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会被包括在内,但事实并非如此。


暮色呼如
浏览 244回答 2
2回答

临摹微笑

添加include_package_data=True到您的setup-function(您已经这样做了)。MANIFEST.in在同一个目录下创建一个文件setup.pyMANIFEST.in 可以如下所示:include indictrans/models/ben-eng/* include indictrans/models/ben-guj/*你不需setup.cfg要这样做。编辑关于recursive-include:根据文档,这也应该有效:recursive-include indictrans/models *.npy *.vec

蝴蝶刀刀

include_package_data=True需要MANIFEST.in。要包含模块的数据,indictrans.models您必须提供全名:package_data={'indictrans.models': ['*.npy','*.vec']},
随时随地看视频慕课网APP

相关分类

Python
我要回答