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



我有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

当我切换到绝对导入时,它可以工作。但我不想意外导入其他模块。我想确保从脚本目录中导入模块。我如何让它工作?还是我做错了什么?

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

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

from m1 import a
a()

您可以查看这篇文章,以获取有关在 python 中导入的更多信息。

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

from my_package import m1
m1.a()

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

最新更新