使用 setuptools 复制非 .py 文件
Using setuptools to copy non .py files
我的 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
中,我试图通过 include_package_data
指令明确包含此文件夹 models
,例如:
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
会被包括在内,但事实并非如此。
- 将
include_package_data=True
添加到您的 setup
函数(您已经这样做了)。
- 在与
setup.py
相同的目录中创建文件 MANIFEST.in
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']},
我的 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
中,我试图通过 include_package_data
指令明确包含此文件夹 models
,例如:
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
会被包括在内,但事实并非如此。
- 将
include_package_data=True
添加到您的setup
函数(您已经这样做了)。 - 在与
setup.py
相同的目录中创建文件
MANIFEST.in
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']},