以简单的方式安装和访问数据文件(conf、json、sqlite3,…)。

datafolder的Python项目详细描述


Built Status

datafolder是一个小型的python库,它使安装变得非常容易 包的数据文件access稍后访问它们。

如果你想安装一些数据文件(conf,sqlite,csv,…)到 用户的主目录,发现使用setuptools很困难,然后在这里 是有帮助的。

WARNING this is beta software!

首先,让我们让生活更简单,并使用一些“按惯例配置”。

我假设(1)您的项目布局如下:

MANIFEST.in
README.rst
setup.py
mypkg
    │
    ├── __init__.py
    ├── mypkg.conf
    ├── mypkg.db
    └── ...

你想把一个文件夹放在用户的主目录中 (在Windows中为%appdata%),数据文件(conf,csv,…)在其中。 此文件夹将具有您的包的名称(在Unix中以“.”开头) 系统),比如“.mypkg”,当然,还有正确的权限 (它将与sudo pip install mypkg一起工作)。对于虚拟环境 数据文件夹将放在环境的根目录下。

怎么做?

  1. 首先,安装datafolder包:

    $ pip install -U datafolder
    
  2. 然后,键入:

    $ datafolder
    

    它将生成一个名为bootdf.py的文件,您必须放在mypkg目录中,并且 名为setup_TPL.py的新文件必须放在项目的根目录中。

  3. setup_TPL.py是一个模板,您必须适应您的情况:

importsysimportpkg_resourcesfromsetuptoolsimportsetupfrommypkg.bootdfimportInstaller# <-- ADAPT THIS# write the name of the package (in this case 'mypkg'!)MYPKG='mypkg'# <-- ADAPT THIS# list of data files in mypkg (just the names)# [don't forget to include these files in MANIFEST.in!]MYDATAFILES=['mypkg.conf','mypkg.db']# <-- ADAPT THIS# tell setup were these files are in your package# (I assume that they are together with the first __init__.py)MYRESOURCES=[pkg_resources.resource_filename(MYPKG,datafile)fordatafileinMYDATAFILES]# now, create the installerinstaller=Installer(sys.argv)# create the data folder and tell setup to put the data files thereDATAPATH=installer.data_path(MYPKG)data_files=[(DATAPATH,MYRESOURCES)]# now, setup can do his thing...setup(name=MYPKG,packages=[MYPKG,'other_packg1','other_packg2'],# <-- ADAPT THISdata_files=data_files,...# <-- ADAPT THIS)# but we are NOT READY, in some cases the data files# don't have the appropriate permissions,# let us fix that...installer.pos_setup(MYDATAFILES)
  1. 现在,rename将文件重命名为setup.py
  2. 编写manifest.in文件(缺少此步骤是许多问题的原因!)。应该是这样的:
include *.txt
include *.md
include *.rst
include mypkg/*.conf
include mypkg/*.rst
include mypkg/*.db

仅此而已!

But with version 0.2.1 it is even better!
  1. 只要转到项目的根目录并在终端类型中:

    $ datafolder mypkg
    
  2. 现在,您将看到MANIFEST.insetup.py是为您填写的,并且 bootdf.py已经在mypkg文件夹中。您只需完成setup.py根据需要(字段authoremailurl和trove分类器…。

“但是,我有相反的问题,我如何在代码中访问这些文件?“。” 我听到你说。

非常简单,在您的代码中(对于与bootdf.py位于同一文件夹中的文件):

from.bootdfimportDataFolderdata=DataFolder('mypkg')# now you can get the full path of each data file, e.g.conf_fp=data.files['mypkg.conf']# do your thing... (read, write, ...)

为了方便起见,DataFolder发现位置 提供属性和方法, 这样可以方便地处理数据文件夹中显示的文件。

Feedback请!

REMARK: as you can see above, this only works if the install method uses ^{tt10}$. Is not the case of python wheels however!

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java如何序列化数字?   java如何用我的Mainclass扩展ListActivity类和Fragment类?   JavaJersey、Jackson和JAXRS发布了多种JSON格式   java如何使用JavaFXKeyCombination覆盖系统默认的键盘快捷键,如Ctrl+C、Ctrl+V?   java Jersey类路径扫描示例Jersey。配置。服务器供应商。类路径   java什么样的数据结构可以作为一个数组,但在同一索引下给定多个值时会自动增长到第二维度?   java如何序列化非持久实体中的嵌套PersistentEntityResource   协议缓冲区我可以让protoc在Java中生成int数组吗?   在GregorianCalendar ArrayList Java中添加日期元素   从html模板动态生成pdf文件并用java生成目录   java Gridgain 6.5.5开源多个节点速度较慢。。?   java如何检查数组中所有整数的不相等性?   java在Eclipse中,如何多次运行JUnit测试用例   java侦听器不能处理特定的片段   java不是一个声明?(蓝色J)   找不到Attributer类型的PersonId的java定义