0

当我有以下软件包时:

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 列表的方法。

4

2 回答 2

2
import dir1

导入 dir1 的__init__.py. 您可以使用dir1.my_var_from_dir1_init. 您无法访问模块,只能访问 dir1's 上的内容__init__

from dir1 import *

导入__all__在 dir1 上定义的变量上指定的模块__init__.py。如果没有这样的变量,那么它会导入 dir1 的所有模块。您可以直接访问它们,例如main_code1.myvar.

from dir1 import maincode

假设这是一个错字并且您实际上有一个模块或类,它会从 dir1maincode导入模块/类。maincode您可以像上面提到的那样直接访问它。

请注意,每个选项都__init__.py隐式或显式地导入 dir1。如果你在 上导入模块__init__.py,那么 usingimport dir1将允许你使用dir1.module.


要将 dir3 导入maincode3maincode.py,只需使用from dir3 import maincode3. 请注意循环导入,这将产生导入错误。您还可以查看相对导入

于 2013-08-28T22:10:36.210 回答
1
  • import dir1 will import dir1/__init__.py file.
  • from dir1 import *: all modules inside dir1 will be imported. Access "main_code1" without using the "dir." before.
  • from dir1 import main_code1 will only import the main_code1 module.

If the __main__.py file is importing all the other modules, then you can access dir3.maincode3.py from dir1.main_code1.py simply doing something like:

import dir3.maincode3

于 2013-08-28T22:13:39.390 回答