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

时间:2017-01-03 20:19:30

标签: python python-2.7 python-import

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

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

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

2 个答案:

答案 0 :(得分:1)

如果您正在遍历的所有目录都是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是一个包含__init__.py文件的Python包。

答案 1 :(得分:0)

只需将__init__.py文件添加到目录中即可将其视为模块:

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

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