在python中导入系统 - 导入包

时间:2013-08-28 21:51:55

标签: python import module

当我有以下包裹时:

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列表的情况下搜索方式。

2 个答案:

答案 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