我正在开发一个Python软件包,而Python软件包的实现取决于一些研究结果。我将研究结果保存在Python字典中。我有2个问题:
我调查了this,但仍然不知道如何从头开始保存程序包内部数据。它也没有显示如何加载保存的内部数据。 R中是否有类似devtools::use_data
的东西?
答案 0 :(得分:0)
这通常是我通过pip对标准python3分发所做的工作(它镜像了R数据的分发)。
然后,如果您的软件包被称为“ my_data_pack”,则您将具有以下文件夹结构:
defmodule CandleManager.Bitfinex.Realtime.Supervisor do
use Supervisor
alias CandleManager.Bitfinex.Realtime
require Logger
def start_link(args) do
Supervisor.start_link(__MODULE__, args, name: __MODULE__)
end
@impl Supervisor
def init([market_manager_pid: _pid] = args) do
childrens = [
{Realtime.Websocket.Server, []},
{Realtime.Manager.Server, []},
{Realtime.TradeToCandle.Server, []},
{Realtime.TradeDiscarder.Server, args}
]
Supervisor.init(childrens, strategy: :one_for_all, max_restarts: 0)
end
end
.
├── my_data_pack
│ ├── __init__.py
│ └── my_data
│ └── data_file.txt
└── setup.py
文件的setup
函数中包括以下行:setup.py
在构建pip时,这将使数据包含在tar.gz分发文件中。
根据您的软件包结构,您可能需要将行更改为类似from setuptools import setup, find_packages
setup(
name='my_data_pack',
packages=find_packages(),
package_data={'my_data_pack': ['my_data/*']}
)
的行
如您所提到的链接所示。
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()
的这些:
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()
部分以读取您自己的数据格式。这就是打包代码所需的全部内容。
readlines
这将创建一个名为“ dist”的新目录,其中包含tar.gz文件。 然后,您可以将软件包安装为
python3 setup.py sdist
要访问python会话中的数据,您将执行以下操作:
pip3 install dist/my_data_pack-0.0.0.tar.gz
在旧的R时代(在import my_data_pack
print(my_data_pack.my_data_object)
之前),您可以使用devtools
函数和选项system.file
来找到已安装库的位置,然后加载数据...类似于python package
。
答案 1 :(得分:0)
Python 3.4在标准库中添加了pathlib
模块,这使得处理文件和目录位置更加优雅。
要获取安装软件包的目录,可以将其包含在__init__.py
中:
from pathlib import Path
PACKAGEDIR = Path(__file__).parent.absolute()
要获取包目录中文件的路径,可以按以下方式构造路径:
my_file = PACKAGEDIR / 'my_data' / 'data_file.txt'