为PIP制作一个包含data_files的python包
我正在做一个项目,布局是这样的:
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 个回答
-1
把你的 MANIFEST.in
文件改一下,把那些 .json
文件加进去。
这样做可能就能解决问题:
recursive-include project/ *.json
0
看看这个包 https://pypi.python.org/pypi/datafolder。它可以让你更简单地安装和使用数据文件,比如 *.conf、*.ini、*.db 等等,既可以通过你的包来使用,也可以通过用户来使用。
7
来自 https://docs.python.org/3.4/distutils/setupscript.html#installing-additional-files 的内容:
如果 directory 是一个相对路径,那它会根据安装的前缀来解释(对于纯Python包来说是Python的
sys.prefix
,而对于包含扩展模块的包则是sys.exec_prefix
)。files 中的每个文件名都是相对于包源代码分发中的
setup.py
脚本来解释的。
所以,这里描述的行为就是 data_files
的工作方式。
如果你想在你的包中包含数据文件,你需要使用 package_data
来代替:
package_data={'project': ['default_data.json', 'other_datas/default/*.json']}