Compilation 无法运行Base.compilecache:";在路径中找不到“;

Compilation 无法运行Base.compilecache:";在路径中找不到“;,compilation,julia,Compilation,Julia,我现在正在尝试预编译一个Julia模块,以便它可以运行得更快。然而,我觉得奇怪的是,在模块声明之前编写\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu()似乎并没有在文件夹中生成任何缓存文件 然后,我尝试通过以下步骤调用函数Base.compilecache: 在项目文件夹中启动REPL 包括(“M.jl”) Base.compilecache(“M”) 然而,尽管前两个步骤完成时没有问题,而且我实际上可以运行模块中

我现在正在尝试预编译一个Julia模块,以便它可以运行得更快。然而,我觉得奇怪的是,在模块声明之前编写
\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu()
似乎并没有在文件夹中生成任何缓存文件

然后,我尝试通过以下步骤调用函数
Base.compilecache

  • 在项目文件夹中启动REPL
  • 包括(“M.jl”)
  • Base.compilecache(“M”)
  • 然而,尽管前两个步骤完成时没有问题,而且我实际上可以运行模块中定义的函数,但第三个步骤抱怨“ERROR:ArgumentError:M not found in path”,并且我似乎仍然无法为模块生成任何缓存


    我在这里做错了什么?

    编译模块是在用户定义的地方生成的,在linux中通常是
    ~/.julia/lib/v0.6/
    。我敢肯定,如果您查看一下,您会发现与模块的预编译版本相对应的
    .ji
    文件。删除一个并在julia会话中再次尝试导入,以确认它将再次尝试预编译;如果是,则表示您的
    \uuuu precompile\uuuu()
    指令正在工作

    此外,要小心推自定义模块的路径(即源代码
    .jl
    部分,而不是预编译的
    .ji
    文件的路径)到
    加载路径
    (即
    推送!(加载路径,“./”
    )的路径,如果未在默认位置“安装”(通常
    ~/.julia/v0.6/
    )。当您要导入模块时,Julia需要访问这两者


    (顺便说一句,如果你更新了你的模块,你应该会看到一个预编译发生)

    顺便说一句,我想这只是问题本身的一个输入错误,但是指令是
    \uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu。这可能是什么原因?可能有什么东西使模块无法编译吗?啊,对不起,刚刚发现了你问题中的确切措辞。不包括该模块<代码>导入
    它。我相信,只有当您尝试使用模块导入
    时,才会进行预编译检查。如果您只是
    包含它,实际上您是在将代码转储到当前环境中,因此据我所知,没有尝试预编译模块。这也是关于“必须将当前路径加载到load_path变量”的要点。Julia只在
    加载路径中定义的目录中查找模块。要导入当前目录中的模块,您需要首先将此目录添加到
    LOAD\u路径中,以便julia可以找到它。谢谢。使用
    import
    最后让Julia预编译模块。但是,这是否意味着任何想要运行此程序的人都必须首先更改其
    julia
    实例的
    LOAD\u路径,然后导入该模块?我想另一种方法是将程序作为Pkg分发,然后让其他用户安装Pkg。然而,如果到目前为止该程序只是一个脚本集合,那么似乎没有其他方法可以做到这一点?根本没有。是的,最好的方法是创建一个包,但您也可以将模块与脚本一起分发(根据我对您最近的另一个问题的回答),并在那里准备任何
    LOAD\u PATH
    指令,以及任何其他环境变量初始化或输入解析等。