如何从同一程序中的不同目录导入包?

How to import a package from a different directory in the same program?

假设我有一个如下所示的目录树:

main -
     |
    lib-
       |
      core-
          |
         fun-
            |
          some_file
        stuff-
             |
        another_file

如何将模块从 some_file 导入到 another_file?每次我尝试导入时(是的,我知道 __init__.py)我都会收到错误消息:

Traceback (most recent call last):
  File "file.py", line 6, in <module>
    from some_file import some_method
ImportError: No module named some_file

是否可以将模块导入到另一个文件中?

如果您遍历的所有目录都是 Python 个包(其中包含 __init__.py 个文件),您可以使用绝对或相对导入。

假设您是 运行 您的程序,来自 main 包所在的目录,您将导入 some_file 模块:

import main.lib.core.fun.some_file

否则您必须在尝试导入之前附加到 Python 路径:

import sys
sys.path.append("......main/lib/core")

import fun.some_file

第二个例子假设 fun 是一个 Python 包,里面有 __init__.py 个文件。

只需在目录中添加一个 __init__.py 文件,使其被视为一个模块:

main -
     |
    lib-
       |
      core-
          |
         fun-
            |
          some_file
          __init__.py
        stuff-
             |
        another_file

__init__.py可以是一个空白文件,重要的是它存在。然后,你可以做 import fun.some_file