【问题标题】:How to know what packages I already have downloaded in Octave?如何知道我已经在 Octave 中下载了哪些软件包?
【发布时间】:2018-03-14 02:35:27
【问题描述】:

我几天前刚刚安装了 Octave,并认为我一直在使用“pkg 加载名称”功能安装软件包,但从未得到确认或任何看起来软件正在尝试下载它们的东西。我也试过 pkg install -forge package_name 但这似乎不起作用。这两个调用有区别吗?

并且;我怎么知道他们正在下载?我在哪里可以找到它们的列表?

【问题讨论】:

  • manual covers all your asked questions。 TL;DR:pkg list 显示已安装的软件包,只有 -forge 选项“下载”并安装软件包,没有 -forge 它们是使用 lokal 文件安装的。如果您想要安装时的状态,请使用-verbose
  • 下载时是否自动安装所有包?因为我看到了大约 30 个我绝对没有下载的列表。你确定它只是不是总可用包的列表吗?
  • 一些发行版,例如windoze的官方MXE安装程序,已经包含了大多数forge包,它们与核心应用程序一起安装
  • 如果您使用了 Windows 安装程序,所有软件包都可以使用。 pkg list 会告诉你那里有什么,pkg load pgkname 会加载它以供使用。如果列表为空,就像您使用 windows zip 安装程序一样,pkg rebuild 将重新扫描包文件夹并将新列表放在一起。
  • 所以如果我想在包中调用一个函数,即使已经安装,我总是必须先“加载”它?我不确定 MATLAB 曾经这样工作过,它只是“如果它下载了我可以调用它”lol

标签: octave


【解决方案1】:

octave 4.2.1 中的下载功能和自动安装包在 windows 下被破坏。然而,标准数据包随基本安装一起提供。只需输入
pkg list
在 octave 控制台中显示所有已安装的软件包。在我的情况下,结果列表以这些行开头

Package Name         | Version | Installation directory
---------------------+---------+-----------------------
     communications  |   1.2.1 | C:\Octave\OCTAVE~1.1\share\octave\packages\communications-1.2.1
            control  |   3.0.0 | C:\Octave\OCTAVE~1.1\share\octave\packages\control-3.0.0
     data-smoothing  |   1.3.0 | C:\Octave\OCTAVE~1.1\share\octave\packages\data-smoothing-1.3.0
           database  |   2.4.2 | C:\Octave\OCTAVE~1.1\share\octave\packages\database-2.4.2
          dataframe  |   1.1.0 | C:\Octave\OCTAVE~1.1\share\octave\packages\dataframe-1.1.0
...

要以编程方式获取包信息,请使用

[dummy,info]=pkg('list');

info 是一个结构元胞数组,其中包含有关包的信息。你可以例如阅读有关名称和加载状态的信息:

>> info{1}.name
ans = signal
>> info{1}.loaded
ans = 0

要获得有关包功能的帮助,请在命令行输入help pgk。此帮助当前(Octave 5.1)未包含在 html 文档中。这意味着doc help 不会显示此帮助页面。

【讨论】:

  • 使用 pkg list 我可以通过眼睛阅读列表,但在程序中并不那么容易。结构不是那么简单,我无法找到如何正确索引表格单元格以找到“包名称”,并检查是否有星号或其他“加载”状态指示。
  • 函数调用[dummy,info]=pkg('list'); 在结构元胞数组中很好地提供了所有信息。您可以使用info{1}.name 等命令遍历信息以获取名称或info{1}.loaded 以获取包的名称和状态。顺便说一句:为什么需要检查包的状态。通常只需在您需要的函数中发出pkg load ... 就足够了。如果包已经加载,执行时间相对较短。
  • 是的,当我知道确切的索引时我可以。但是使用“:”并将其替换为字符串比较函数(对我而言)似乎无法通过简单的 {#} 索引来实现。我得到“无法进一步索引 cs-list”。所以我必须遍历 FOR 循环中的每个单元格,并有条件地检查“.loaded”字段。这不像 Octave 通常允许的那样优雅。而且没有那么快,所以在每个程序周期执行加载之前检查加载状态没有任何好处。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-07-18
  • 1970-01-01
  • 2015-02-10
  • 2011-03-14
  • 2016-10-12
  • 2014-02-20
  • 1970-01-01
相关资源
最近更新 更多