我有以下目录结构:
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'
我想这意味着不保留数据文件的相对路径。我该如何解决这个问题,并确保我的脚本可以访问数据文件?
谢谢。
答案 0 :(得分:0)
当open('data/file1', 'r')
相对于进程的当前工作目录运行时,该路径实际上是相对于代码文件。获取与代码分发相关的数据文件的最佳方法是使用setuptools
而不是裸distutils
来构建和分发您的包。 setuptools
具有获取程序包数据资源文件的API。