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)
来自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)