我正在尝试创建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'
要使它正常工作,我需要更改什么?
答案 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模块。