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

Arr*_*uda 2 python distutils pip data-files package

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

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
Run Code Online (Sandbox Code Playgroud)

问题是,当我使用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]])
Run Code Online (Sandbox Code Playgroud)

tob*_*bib 5

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

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

在每个文件名的文件相对于解释setup.py脚本在包源分布的顶部.

所以描述的行为就是如何data_files工作.

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

package_data={'project': ['default_data.json', 'other_datas/default/*.json']}
Run Code Online (Sandbox Code Playgroud)

  • 如果文件位于软件包根目录之外,则无法使用package_data(例如,如果您的软件包位于“ src”内部,但您想在文件外部添加文件,则可能会发生)。没有办法使用data_files进入软件包吗? (2认同)