将数据文件添加到python项目setup.py

Sha*_*ism 14 python setuptools setup.py

我有一个这样的项目:

??? CHANGES.txt
??? LICENSE
??? MANIFEST.in
...
??? docs
?   ??? index.rst
??? negar
?   ??? Negar.py
?   ??? Virastar.py
?   ??? Virastar.pyc
?   ??? __init__.py
?   ??? data
?   ?   ??? __init__.py
?   ?   ??? untouchable.dat
?   ??? gui.py
?   ??? gui.pyc
?   ??? i18n
?   ?   ??? fa_IR.qm
?   ?   ??? fa_IR.ts
?   ??? negar.pro
??? setup.py
...
Run Code Online (Sandbox Code Playgroud)

在里面我的文件Virastar.py需要一些数据data.untouchable.dat.它工作正常,直到我用这个安装项目setup.py:

setup(
    ...
    include_package_data=True,
    packages = find_packages() + ['negar'],
    package_dir={'negar': 'negar'},
    package_data={'negar': ['data/*.dat']},
    entry_points={
        'console_scripts': [
            'negar = negar.Negar:main',
        ],
    }, 
    ...  
)
Run Code Online (Sandbox Code Playgroud)

之后,当我启动我的程序时,当它需要该数据文件时,它会返回此错误:

IOError: [Errno 2] No such file or directory: 'data/untochable.dat'
Run Code Online (Sandbox Code Playgroud)

甚至在我的egg-info资源中我找不到任何数据文件:

...
negar/Negar.py
negar/Virastar.py
negar/__init__.py
negar/gui.py
negar/data/__init__.py
Run Code Online (Sandbox Code Playgroud)

我错过了什么吗?

谢谢你们.

编辑:我必须在init .py中添加任何特殊内容吗?

我必须补充一点:我使用了untouchable.dat就像这样:

f = codecs.open('data/untouchable.dat', encoding="utf-8")
Run Code Online (Sandbox Code Playgroud)

dfr*_*kow 14

我使用了data_files

data_files = [('', ['negar/data/untouchable.dat'])],
Run Code Online (Sandbox Code Playgroud)

  • 在元组上,左侧是目标文件,右侧是源文件。通过将目标设置为空,在安装过程中该文件将被放置在 Python 前缀的根目录中。我的建议是有一个像这样的目录: `[('negar/data', ['negar/data/untouchable.dat'])]` (2认同)

Sha*_*ism 9

第一个问题是我没有将数据文件导入包含MANIFEST.in文件的包中.我像这样导入它:

include negar/data/*.dat
Run Code Online (Sandbox Code Playgroud)

之后,我的数据文件已经通过我的软件包安装导入.但是因为我在打开我的数据文件时出错,所以python无法找到它.这个问题帮助我找到了包子目录中Python访问数据的正确方法 ,现在我使用这样的东西:

import os
this_dir, this_filename = os.path.split(__file__)
DATA_PATH = os.path.join(this_dir, "data", "data.txt")
print open(DATA_PATH).read()
Run Code Online (Sandbox Code Playgroud)