Nim 在哪里搜索要导入的模块?

Where does Nim search for modules to import?

当使用 import 语句时,how/where Nim 会搜索模块吗?

我知道可以使用文件路径,但是如果我不想使用文件路径,我应该把我本地定义的模块放在我机器上的什么地方?

我还没有使用过 Nimble,我认为这是一种方式,但我更感兴趣的是如果模块 是在本地定义的,它将如何完成。

你基本上有两个选择:

  1. 可以在编译命令中传入搜索路径:nim c -p:~/myModulePath.

  2. 您可以通过 path="$home/myModulePath" 将搜索路径添加到您的 config/nim.cfg。该文件还准确地告诉您 how/where Nim 默认查找导入。

Nim 在以下位置搜索模块:

  1. 相对于导入模块的目录(通过 import dir.modnameimport dir/modname 如果它不在同一目录中)。
  2. 相对于主模块的目录(同样,如果不在同一目录中,则通过 import dir.modnameimport dir/modname)。
  3. 在命令行选项 --path-p 指定的目录中。
  4. 在Nimble包目录下,通常是~/.nimble/pkgs.
  5. 在标准库中。

命令 nim dump 将显示所有正在使用的模块搜索路径(除了 Nimble 包)。

您可以执行以下操作来使用您自己的模块:

  1. 使用 --path/-p 命令行选项将包含它们的目录传递给编译器。
  2. 将相同的命令行选项放入 config files 之一。其中有几个,全局文件(用于系统范围的设置)、用户文件(用于每个用户设置)、项目文件(用于项目设置)和父目录配置文件(用于目录是当前项目目录的父级,用于多个项目共享的配置)。选择您需要的范围。
  3. 使用 Nimble 为当前用户完成的任何项目安装模块。为此,在目录中创建一个libname.nimble(用实际名称替换libname)文件并使用nimble install。然后,您可以直接从任何其他项目导入该库中的 *.nim 文件。使用nimble uninstall libname再次卸载库。

基本 libname.nimble 文件具有以下内容。

[Package]
name = "libname"
author = "Your Name"
version = "0.1"
description = "Example library."
license = "none"

nim dump 命令将向您显示路径中的内容。查看 advanced compiler options.

的文档