3

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

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]])
4

3 回答 3

6

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

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

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

所以所描述的行为只是如何data_files工作。

如果你想在你的包中包含你需要使用的数据文件package_data

package_data={'project': ['default_data.json', 'other_datas/default/*.json']}
于 2014-09-26T09:21:08.063 回答
0

看看这个包https://pypi.python.org/pypi/datafolder。它使您的软件包用户易于安装和使用(数据文件:*.conf、*.ini *.db、...) 。

于 2015-02-25T12:14:52.087 回答
-1

更改您的MANIFEST.in以包括那些.json.

它可能会起作用:

recursive-include project/ *.json
于 2011-10-30T02:39:17.353 回答