gpt4 book ai didi

julia - 如何获取给定模块导入的模块列表

转载 作者:行者123 更新时间:2023-12-03 16:48:03 25 4
gpt4 key购买 nike

在以下示例中:

julia> module M
using DataStructures
end
Main.M

julia> names(Main.M, all=true, imported=true)
5-element Array{Symbol,1}:
Symbol("#eval")
Symbol("#include")
:M
:eval
:include
我们看到 names如果未导出模块(在本例中为 DataStructures),则不会列出由模块(在本例中为 Main.M )导入的模块的名称。我的问题是如何获取给定模块导入的模块列表。
另一个问题是如何检查此类模块的来源(请注意,使用例如 Pkg.dependencies 是不够的,因为模块可能已先加载,然后 Julia session 的事件环境可能已更改) .如果第二个问题通常没有一个好的答案,那么我对 UUID 和来自 Julia 包的全局注册表的包版本进行检查就足够了。
谢谢!

最佳答案

您可以通过调用 C 函数 jl_modules_using 将模块加载到另一个模块中。 ,我经常定义以下助手 Julia 绑定(bind):

modules(m::Module) = ccall(:jl_module_usings, Any, (Any,), m)
请注意,这只适用于通过 using 引入的东西。 ,而不是通过 import ,例如:
julia> modules(m::Module) = ccall(:jl_module_usings, Any, (Any,), m)
modules (generic function with 1 method)

julia> module Foo
import Pkg
end

modules(Foo)
2-element Array{Any,1}:
Base
Core

julia> module Bar
using Pkg
end

modules(Bar)
3-element Array{Any,1}:
Pkg
Base
Core
如果您想更准确地测试模块是否已加载(但没有导入者的信息),您可以使用 Base.loaded_modules :
julia> Base.loaded_modules
Dict{Base.PkgId,Module} with 33 entries:
SuiteSparse [4607b0f0-06f3-5cda-b6b1-a6196a1729e9] => SuiteSparse
SharedArrays [1a1011a3-84de-559e-8e89-a11a2f7dc383] => SharedArrays
REPL [3fa0cd96-eef1-5676-8a61-b3b8758bbffb] => REPL
Mmap [a63ad114-7e13-5084-954f-fe012c677804] => Mmap
⋮ => ⋮
遗憾的是,我不确定为什么我们没有一个很好的模块列表,这些模块具有已导入另一个模块的绑定(bind)。我建议在 Julia 跟踪器上打开一个问题,询问是否需要它,可能有一种我自己不知道的简单方法来解决它。

关于julia - 如何获取给定模块导入的模块列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63860020/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com