访问python源分发包中包含的资源

时间:2020-04-03 10:30:23

标签: python python-3.x

我正在尝试创建python包,并且添加了一些模块才能正常运行所需的文件,例如:https://docs.python.org/2/distutils/setupscript.html#distutils-additional-files

根据情况,这是我需要使用的方法(如果可能的话)。我还需要获得可分发的源代码,因此在制作其他类型的python可分发文件时无法正常工作。

我的setup.py看起来像这样:

from setuptools import setup
setup(name='mypackage',
      version='0.1',
      py_modules=['mypackage'],
      install_requires=['numpy'],
      data_files=[('data', ['data/file0.npz', 'data/file1.npz'])]
      )

目录结构如下:

├── PKG-INFO
├── data
│   ├── data0.npz
│   └── data1.npz
├── dist
│   ├── mypackage-0.1.zip
├── mypackage.egg-info
│   ├── PKG-INFO
│   ├── SOURCES.txt
│   ├── dependency_links.txt
│   ├── requires.txt
│   └── top_level.txt
├── mypackage.py
├── setup.cfg
└── setup.py

我正在尝试像这样加载它(每个函数,但为了简单起见,删除了 init ):

import numpy as np

class MyClass ():
    def __init__(self):
        self.data0 = np.load("data/file0.npz")
        self.data1 = np.load("data/file1.npz")

并尝试实例化该类时收到此错误:

No such file or directory: 'data/file0.npz'

要使它正常工作,我需要更改什么?

1 个答案:

答案 0 :(得分:1)

要加载软件包资源,我通常使用pkg_resources module

以下是获取相对于当前模块的资源文件的示例:

from pkg_resources import resource_filename

def main():
    print(resource_filename(__name__, 'data/test.txt'))

在您的setup.py中,您可以使用package_data包含打包数据文件。

setup(
    name='',
    # (...)
    package_data={
        '': [
            '*.txt',
        ],
    },
)

注意:要使其工作,data必须是python模块。

相关问题