如何使用相对导入将 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()
我有 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()