Python脚本依赖于数据文件(distutils)

时间:2016-02-23 01:32:54

标签: python distutils

我有以下目录结构:

data __ __init__.py
    |__ file1
    |__ file2
script
README
MANIFEST.in
__init__.py
setup.py

Python脚本script使用data中的数据文件。我正在尝试为此脚本创建一个源tarball,以便可以在系统范围内使用它。

__init__.py文件为空。文件'script'通过'data/file1'data/file2调用数据文件。 MANIFEST.in的内容是:

include README script
recursive-include data *

setup.py中,除其他外,我有:

packages = ["data"],
package_data = ["data": "*"],
scripts = ["script"]

设置发行版后(使用sdist),我尝试在我的系统上安装它。当我尝试使用script时,它说:

Traceback (most recent call last):
  File "/home/nsoum/anaconda/bin/script", line 54, in <module>
    with open('data/file1', 'r') as do:
IOError: [Errno 2] No such file or directory: 'data/file1'

我想这意味着不保留数据文件的相对路径。我该如何解决这个问题,并确保我的脚本可以访问数据文件?

谢谢。

1 个答案:

答案 0 :(得分:0)

open('data/file1', 'r')相对于进程的当前工作目录运行时,该路径实际上是相对于代码文件。获取与代码分发相关的数据文件的最佳方法是使用setuptools而不是裸distutils来构建和分发您的包。 setuptools具有获取程序包数据资源文件的API。