如何使用相对导入将 python 脚本拆分为多个文件?

How to split python script into several files using relative imports?

我有 import.py 脚本。我想将一些代码提取到一个单独的文件中,比如 m1.py:

$ ls
import.py  m1.py

$ cat import.py
from .m1 import a
a()

$ cat m1.py
def a():
    print('it works')

$ python import.py
Traceback (most recent call last):
  File "import.py", line 1, in <module>
    from .m1 import a
ModuleNotFoundError: No module named '__main__.m1'; '__main__' is not a package

当我切换到绝对导入时,它起作用了。但我不想不小心导入其他模块。我想确保脚本目录中的模块已导入。我如何让它发挥作用?或者我做错了什么?

在m1.py所在目录添加__init__.py
编辑:运行 将其作为先前工作目录中的一个包。 cd .. && python -m prev_dir.import

如果您不覆盖内置模块。默认情况下,python 首先在当前目录中查找要导入的文件名。因此,如果另一个目录中有另一个同名脚本,则只会导入当前目录中的脚本。

然后,您可以使用绝对导入来导入。

from m1 import a
a()

您可以查看 this post,了解有关在 python 中导入的更多信息。

确保您导入的不是内置的。例如,您可以在当前目录中创建自己的包,"my_package" 并将模块 m1 移动到其中。然后你可以导入:

from my_package import m1
m1.a()