使用一些数据文件为PIP制作python包

使用一些数据文件为PIP制作python包,python,package,distutils,pip,data-files,Python,Package,Distutils,Pip,Data Files,我正在用这种布局做一个项目: project/ bin/ my_bin.py CHANGES.txt docs/ LICENSE.txt README.txt MANIFEST.in setup.py project/ __init__.py some_thing.py default_data.json other_datas/

我正在用这种布局做一个项目:

project/
    bin/
        my_bin.py
    CHANGES.txt
    docs/
    LICENSE.txt
    README.txt
    MANIFEST.in
    setup.py
    project/
        __init__.py
        some_thing.py
        default_data.json
        other_datas/
            default/
                other_default_datas.json
问题是,当我使用pip安装它时,它会将“default\u data.json”“other\u data”文件夹与应用程序的其余部分放在不同的位置

我该怎么做才能让他们在同一个地方

它们最终出现在“/home/user/.virtualenvs/proj env/project”

而不是“/home/user/.virtualenvs/proj env/lib/python2.6/site packages/project”

在setup.py中,我是这样做的:

inside_dir = 'project'
data_folder= os.path.join(inside_dir,'other_datas')

data_files = [(inside_dir, [os.path.join(inside_dir,'default_data.json')])]
for dirpath, dirnames, filenames in os.walk(data_folder):
    data_files.append([dirpath, [os.path.join(dirpath, f) for f in filenames]])

更改
清单.in
以包含那些
.json

它可能会起作用:

recursive-include project/ *.json
发件人:

如果目录是一个相对路径,则它是相对于安装前缀进行解释的(对于纯Python包,Python的
sys.prefix
;对于包含扩展模块的包,Python的
sys.exec\u prefix

文件中的每个文件名都是相对于包源发行版顶部的
setup.py
脚本进行解释的

因此,所描述的行为只是
数据文件的工作方式

如果要在包中包含数据文件,则需要改用:


看看这个包裹。通过您的包用户可以轻松安装和使用(数据文件:*.conf、*.ini*.db,…)

清单中已经有这些文件,这些文件正在运行,但位于错误的文件夹中。如果文件位于包根目录之外,则无法使用包_数据(这可能发生,例如,如果您的软件包位于“src”内部,但您希望在其外部添加一个文件)。是否有办法使用数据文件进入软件包?此软件包打乱了我的构建并浪费了我的时间。可能只是在此处和此处进行一点更改就可以解决问题,但不能向其他人推荐使用它。
package_data={'project': ['default_data.json', 'other_datas/default/*.json']}