当我有以下包裹时:
src
/__main__.py
/dir1
/__init__.py
/main_code1.py
/service.py
/config.py
/dir2
/__init__.py
/maincode2.py
/dir3
/__init__.py
/maincode3.py
在文件__main__.py
import dir1
&安培;
from dir1 import *
&安培;
from dir1 import main_code1
第二个问题是:如何将maincode3.py(存在于dir3中)导入dir1中的maincode.py脚本?我在不改变sys.path列表的情况下搜索方式。
答案 0 :(得分:2)
import dir1
导入dir1的__init__.py
。您可以使用dir1.my_var_from_dir1_init
访问其中的任何内容。您无法访问模块,只能访问dir1的__init__
上的模块。
from dir1 import *
导入在dir1的__all__
上定义的__init__.py
变量上指定的模块。如果没有这样的变量,那么它会导入所有dir1的模块。您可以直接访问它们,例如main_code1.myvar
。
from dir1 import maincode
假设它是一个拼写错误而你实际上有一个maincode
模块或类,它会从dir1导入maincode
模块/类。您可以像上面提到的那样直接访问它。
请注意,每个选项都隐式或显式地导入dir1的__init__.py
。如果您在__init__.py
导入模块,则使用import dir1
将允许您使用dir1.module
。
要将dir3的maincode3
导入maincode.py
,只需使用from dir3 import maincode3
即可。只需注意循环导入,这将产生导入错误。您还可以查看relative imports。
答案 1 :(得分:1)
import dir1
将导入dir1 / __ init__.py文件。from dir1 import *
:将导入dir1中的所有模块。不使用“dir”访问“main_code1”。之前。from dir1 import main_code1
只会导入main_code1模块。如果__main__.py文件正在导入所有其他模块,那么您可以从dir1.main_code1.py访问dir3.maincode3.py,只需执行以下操作:
import dir3.maincode3