使用一些数据文件为PIP制作python包
我正在用这种布局做一个项目:使用一些数据文件为PIP制作python包,python,package,distutils,pip,data-files,Python,Package,Distutils,Pip,Data Files,我正在用这种布局做一个项目: 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/
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\u data.json”和“other\u data”文件夹与应用程序的其余部分放在不同的位置
我该怎么做才能让他们在同一个地方
它们最终出现在“/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]])
更改
清单.in
以包含那些.json
它可能会起作用:
recursive-include project/ *.json
发件人:
如果目录是一个相对路径,则它是相对于安装前缀进行解释的(对于纯Python包,Python的sys.prefix
;对于包含扩展模块的包,Python的sys.exec\u prefix
)
文件中的每个文件名都是相对于包源发行版顶部的setup.py
脚本进行解释的
因此,所描述的行为只是数据文件的工作方式
如果要在包中包含数据文件,则需要改用:
看看这个包裹。通过您的包和用户可以轻松安装和使用(数据文件:*.conf、*.ini*.db,…),清单中已经有这些文件,这些文件正在运行,但位于错误的文件夹中。如果文件位于包根目录之外,则无法使用包_数据(这可能发生,例如,如果您的软件包位于“src”内部,但您希望在其外部添加一个文件)。是否有办法使用数据文件进入软件包?此软件包打乱了我的构建并浪费了我的时间。可能只是在此处和此处进行一点更改就可以解决问题,但不能向其他人推荐使用它。
package_data={'project': ['default_data.json', 'other_datas/default/*.json']}