我是茱莉亚的新朋友。
我有一个 *.jl文件的集合。有些文件定义了某些模块:
模块AAA
使用BBB
出口商
函数fff(yyy)
返回zzz
端
端
其中一些使用的BBB是在我的集合中的其他文件中定义的模块。
其中一个 *.jl是certain master.jl,它的总体任务是读取一些输入数据并产生某些输出;它使用所有其他 *.jl中定义的模块。
我在我的Ubuntu 22.04工作站上用gcc编译了julia,它是ver.1.11.0。因此,我有一个文件夹$HOME/julia,其中链接到可执行文件julia -> usr/bin/julia
和文件夹$HOME/.julia,
logs
artifacts
packages
registries
config
prefs
compiled
conda
environments
scratchspaces
字符串
这是自动创建的(除了config; config是我根据stackoverflow的建议进行的实验)。
现在我被困在如何运行我的模块集合。
调用
julia AAA.jl
从命令行生成错误
错误:LoadError:ArgumentError:在当前路径中找不到程序包BBB。
- 运行
import Pkg; Pkg.add("BBB")
安装BBB包
即使我事先在同一个窗口中运行了julia BBB.jl而没有任何错误,
如何将我的集合AAA.jl、BBB.jl、. master.jl组织到一个项目中,以便在不同文件中定义的所有模块都正确地包含在一起?
1条答案
按热度按时间fgw7neuy1#
误差
字符串
是因为Julia在运行AAA.jl或master. jl时并不知道BBB.jl。之前在同一个窗口中运行
julia BBB.jl
不会在两个脚本之间创建任何关系,因此不会更改任何内容。修复1:使用包含和相对模块限定符
在每个使用不同模块的文件中,
include
其他模块的文件,并使用点来访问它。例如。AAA.jl将变为:型
这将BBB.jl的内容带入AAA.jl,并使
BBB
成为AAA
的子模块,可以使用点语法using .BBB
进行访问。请注意,这必须在每个使用其他模块的文件中完成,例如,如果master.jl需要使用AAA
和DDD
,则其内容应该是:型
(If master.jl不直接使用
BBB
,那么就不需要包含,AAA.jl中的include
就足够了。)修复方法2:更改包加载路径
如果只有master.jl包含您要直接运行的代码,而其他文件只包含您从master.jl加载的模块,则更简单的解决方法是添加
型
在这种情况下,您不需要
include
s或点语法,文件中的其他内容可以保持原样。@__DIR__
引用包含master.jl的目录,push!
将其导入LOAD_PATH
,这样Julia在遇到using BBB
时就会搜索该目录,并且在其他任何地方都找不到它。旁注
我在我的Ubuntu 22.04工作站上用gcc编译了julia;它是ver.1.11.0。
如果你是Julia的新手,你几乎肯定不想这样做。Julia 1.11版本目前仍在开发中,还不稳定-它的发布可能会在2024年年中左右!安装稳定Julia的最佳方法是使用juliaup脚本,这将允许您安装和更新当前稳定的Julia(截至2023年11月23日的版本为1.9.4)。如果出于某种原因,您确实希望从源代码编译,我建议下载https://github.com/JuliaLang/julia/archive/refs/tags/v1.9.4.zip而不是当前的
master
(这可能是你现在编译成v1.11二进制文件的内容)。