使用一些data_files为PIP创建一个python包

时间:2011-10-28 19:53:55

标签: 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/
            default/
                other_default_datas.json

问题在于,当我使用pip安装它时,它会将“default_data.json”“other_datas”文件夹放在不同的地方。该应用程序的其余部分。

我该如何做才能让他们在同一个地方?

他们最终在“/ 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]])

3 个答案:

答案 0 :(得分:5)

来自https://docs.python.org/3.4/distutils/setupscript.html#installing-additional-files

  

如果目录是相对路径,则相对于安装前缀(纯Python包的Python sys.prefix,包含扩展模块的包的sys.exec_prefix)进行解释

     

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

所以描述的行为就是data_files的工作原理。

如果您想在数据包中包含数据文件,则需要使用package_data代替:

package_data={'project': ['default_data.json', 'other_datas/default/*.json']}

答案 1 :(得分:0)

看一下这个包https://pypi.python.org/pypi/datafolder。它可以通过您的软件包由用户轻松安装和使用(数据文件:*。conf,* .ini * .db,...)。 / p>

答案 2 :(得分:-1)

更改您的MANIFEST.in以包含.json

它可能会起作用:

recursive-include project/ *.json