我正在用这种布局做一个项目:
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]])
答案 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