如何正确地将数据文件夹包含到 python 包中
How to properly include data folder to python package
我正在构建一个小型 python 包,我将其部署到我们的内部 pypi 服务器,以便使用 pip
轻松安装。我正在使用 setup.py
构建 tar.gz 存档以上传到那里。
我需要包含一些额外的数据 - 更具体地说,我在我的项目中使用 nltk
并且我想发送包含已经下载的特定 nltk
数据的包,因为它没有意义我让使用我的包的人负责自己下载它。所以我有以下结构
├── setup.py
├── src
│ ├── __init__.py
│ ├── my_pkg
│ │ ├── __init__.py
│ │ ├── my_module.py
│ │ └── resources
│ │ └── nltk_data
| | └─... too many subfolders and files
我想在安装包后将整个 nltk_data
子文件夹包含在同一个位置。我设法为一个文件工作 package_data={'my_pkg' :['./resources/file.dat']},
,但我不知道如何对具有许多子文件夹、子子文件夹、不同扩展名的文件等的复杂目录结构做同样的事情。有什么办法可以做到这一点吗?
我的setup.py很简单(为了简单起见,我省略了描述或URL等内容)
from setuptools import setup, find_packages
setup(
name='some-cool-name',
version="1.0.0",
classifiers=[],
packages=find_packages(where='src'),
package_dir={'': 'src'},
package_data={'my_pkg' :[]},
include_package_data=True,
py_modules=[],
python_requires='>=3.8',
install_requires=['nltk==3.6.5']
)
您可以简单地指定要包含的数据的相对路径。你需要在两个子文件夹中放置一个 __init__.py
文件,但它应该可以工作。
package_data={'my_pkg' :['my_pkg/resources/nltk_data/*']}
要在您的脚本中使用数据,请使用 importlib
(例如 importlib.read_text
)打开您想要的文件。
在我发布这个问题后不久,我遇到了另一种解决方案,这里没有提到,看起来很优雅,所以我把它放在这里,以防有人觉得它有用。
文件 MANIFEST.in
在目录结构的顶层,在 setup.py 旁边,可以很容易地用
做同样的事情
recursive-include src/my_pkg/resources *
我正在构建一个小型 python 包,我将其部署到我们的内部 pypi 服务器,以便使用 pip
轻松安装。我正在使用 setup.py
构建 tar.gz 存档以上传到那里。
我需要包含一些额外的数据 - 更具体地说,我在我的项目中使用 nltk
并且我想发送包含已经下载的特定 nltk
数据的包,因为它没有意义我让使用我的包的人负责自己下载它。所以我有以下结构
├── setup.py
├── src
│ ├── __init__.py
│ ├── my_pkg
│ │ ├── __init__.py
│ │ ├── my_module.py
│ │ └── resources
│ │ └── nltk_data
| | └─... too many subfolders and files
我想在安装包后将整个 nltk_data
子文件夹包含在同一个位置。我设法为一个文件工作 package_data={'my_pkg' :['./resources/file.dat']},
,但我不知道如何对具有许多子文件夹、子子文件夹、不同扩展名的文件等的复杂目录结构做同样的事情。有什么办法可以做到这一点吗?
我的setup.py很简单(为了简单起见,我省略了描述或URL等内容)
from setuptools import setup, find_packages
setup(
name='some-cool-name',
version="1.0.0",
classifiers=[],
packages=find_packages(where='src'),
package_dir={'': 'src'},
package_data={'my_pkg' :[]},
include_package_data=True,
py_modules=[],
python_requires='>=3.8',
install_requires=['nltk==3.6.5']
)
您可以简单地指定要包含的数据的相对路径。你需要在两个子文件夹中放置一个 __init__.py
文件,但它应该可以工作。
package_data={'my_pkg' :['my_pkg/resources/nltk_data/*']}
要在您的脚本中使用数据,请使用 importlib
(例如 importlib.read_text
)打开您想要的文件。
在我发布这个问题后不久,我遇到了另一种解决方案,这里没有提到,看起来很优雅,所以我把它放在这里,以防有人觉得它有用。
文件 MANIFEST.in
在目录结构的顶层,在 setup.py 旁边,可以很容易地用
recursive-include src/my_pkg/resources *