use*_*758 2 python module package python-3.x python-internals
我正在开发一个 Python 包,Python 包的实现取决于一些研究结果。我将研究结果保存在 Python 字典中。我有两个问题:
我研究了这个,但仍然不知道如何从头开始保存包内部数据。它也没有显示如何加载保存的内部数据。devtools::use_data
在 R 中有类似的东西吗?
这就是我通常使用 pip 为标准 python3 发行版所做的事情(它反映了一些 R 数据发行版)。
然后,如果您的包被称为例如“my_data_pack”,您将拥有以下文件夹结构:
.
??? my_data_pack
? ??? __init__.py
? ??? my_data
? ??? data_file.txt
??? setup.py
Run Code Online (Sandbox Code Playgroud)
setup
您的setup.py
文件的功能中:from setuptools import setup, find_packages
setup(
name='my_data_pack',
packages=find_packages(),
package_data={'my_data_pack': ['my_data/*']}
)
Run Code Online (Sandbox Code Playgroud)
这将使数据在构建 pip 时包含在 tar.gz 分发文件中。根据您的包结构,您可能需要将该行更改package_data={'mypkg': ['my_data/*.dat']},
为您提到的链接中所示的内容。
os
或pkg_resources
要os
在您的__init__.py
文件(或您正在使用的任何其他子模块)中使用这些行:
import os
location = os.path.dirname(os.path.realpath(__file__))
my_file = os.path.join(location, 'my_data', 'data_file.txt')
with open(my_file) as fin:
my_data_object = fin.readlines()
Run Code Online (Sandbox Code Playgroud)
或者这些,如果你喜欢使用pkg_resources
:
import pkg_resources
my_file = pkg_resources.resource_filename('my_data_pack', 'my_data/data_file.txt')
with open(my_file2) as fin:
my_data_object = fin.readlines()
Run Code Online (Sandbox Code Playgroud)
更改readlines
部分以读取您自己的数据格式。这就是包代码所需的全部内容。
python3 setup.py sdist
Run Code Online (Sandbox Code Playgroud)
这将创建一个名为“dist”的新目录,其中包含 tar.gz 文件。然后你可以安装你的包
pip3 install dist/my_data_pack-0.0.0.tar.gz
Run Code Online (Sandbox Code Playgroud)
要访问 python 会话中的数据,您将执行以下操作:
import my_data_pack
print(my_data_pack.my_data_object)
Run Code Online (Sandbox Code Playgroud)
在旧的 R 时代(之前devtools
:),您将使用system.file
带有选项的函数package
来查找已安装库的位置,然后加载数据......类似于 python 的东西os.path.realpah
。
归档时间: |
|
查看次数: |
1735 次 |
最近记录: |