朱莉娅星期三在恩吉
import"(导入)和 "using"(使用)语句在代码上下文和加载文件方面有所不同,这取决于当前的环境。Julia 有两种环境:
-
项目环境(project environment)是一组文件和设置,定义了开发和执行特定项目的环境。项目环境包括项目中使用的设置和依赖关系。在 Julia 中,项目环境是通过 Project.toml 和 Manifest.toml 文件定义的,这两个文件包含了依赖项及其版本的相关信息:
-
项目文件(Project.toml)是一个包含项目直接依赖项信息的文件。它定义了项目中使用的名称和标识符(如软件包名称)。该文件通常只包含直接依赖项及其版本。
-
Manifest 文件*(Manifest.toml)是一个描述项目完整依赖关系图(数据结构)的文件(如果存在)。不仅包括直接依赖关系,还包括项目中使用的所有间接依赖关系。对于每个依赖项,都指定了确切的版本(如软件包)和其他必要信息,以确保项目源代码与其依赖项的版本兼容。
-
-
项目目录*(project directory)是包含项目文件和结构的地方,包括源代码、设置、配置文件和软件包集。项目环境是由项目目录中的文件和目录结构自然形成的。目录中的软件包和模块按照子目录的层次结构排列。如果在`src`子目录下的软件包目录内有一个`软件包名称.jl`文件,这就意味着`软件包名称’软件包在该项目中可用,其代码通过该文件加载。
因此,项目环境是项目依赖项所在的抽象环境,而项目目录则是项目文件的物理存储位置。更多信息,请访问Code Loading 。
Julia 环境定义了特定项目或应用程序应使用哪些软件包和依赖项。LOAD_PATH 作为一个路径数组,用于告诉 Julia 在哪里查找与该环境相关的软件包和模块:
-
LOAD_PATH[1] 是路径数组的第一个元素,指定了自定义环境文件的路径。自定义的 Manifest.toml 和 Project.toml 文件指定了特定项目所需的软件包和版本。无论是添加软件包(Pkg.add)还是更改 toml 环境文件,都不会改变 LOAD_PATH 本身。默认情况下,用户环境创建在
/user/.project
。这样,Julia 就能找到并加载在给定项目中执行代码所需的软件包。 -
LOAD_PATH[2] 是路径数组的第二个元素,指定了系统环境文件的路径。LOAD_PATH[2] 指定了系统软件包的路径,这些软件包适用于所有项目,与特定项目无关。LOAD_PATH[2] 元素不包含 Manifest.toml 和 Project.toml 等全局 toml 文件的路径。取而代之的是指定包含这些文件的目录路径。因此,系统安装的软件包可以从任何项目中访问,无论其项目和清单文件中指定了哪些软件包。默认情况下,系统环境的创建路径是
/user/local/julia-1.M.N/environments/v1.M/
,其中M
和N
是当前项目中 Julia 的版本。
LOAD_PATH 不仅可以包含路径数组中的两个元素,还可以包含任意多个存放软件包的目录路径。当 Julia 使用 using 或 import 搜索要加载的软件包时,它会检查 LOAD_PATH 中指定的所有路径。
|
除了 LOAD_PATH,还有一个名为 loaded_modules 的软件包子集。loaded_modules 指的是当前 Julia 会话中激活的模块(或包)列表。每个模块代表一组已加载并可在代码中使用的函数和数据。
因此,Julia 可以从 LOAD_PATH 数组中指定路径的所有环境中加载并使用所需的包。Base.loaded_modules "函数返回已加载模块的列表。为了更好地理解,请看下图:
Julia 可以使用路径数组元素 LOAD_PATH[1] 和 LOAD_PATH[2]中指定的路径下载并使用项目所需的软件包。然后使用 using
和 import
:
-
using
- 如果要加载模块并在当前命名空间中使用其所有导出符号,则使用using
。using
将模块加载到内存中,并将其添加到 loaded_modules 列表中,这意味着其函数和变量可以直接在代码中使用。当您需要频繁使用模块中的函数或变量而无需重新指定其名称时,这将非常有用。 -
import
- 如果需要加载模块,但不需要将其所有符号导入当前命名空间,则使用import
。import
不会将模块加载到内存中或添加到 loaded_modules,而是创建一个引用,允许通过限定名使用符号。如果只需要模块中的某些字符,或者想明确指定它们的来源以避免名称冲突,请使用import
。
因此,主要区别在于 using
会加载并导入模块的所有导出符号,而 import
会创建一个模块引用,允许你选择使用哪些符号。