如何导入给定相对路径的Python模块?

例如,如果dirFoo包含Foo.py和dirBar,而dirBar包含Bar.py,我如何将Bar.py导入Foo.py?

下面是一个视觉表示:

dirFoo\
    Foo.py
    dirBar\
        Bar.py

Foo希望包含Bar,但重组文件夹层次结构不是一个选项。


当前回答

如果您以这种方式构建项目:

src\
  __init__.py
  main.py
  dirFoo\
    __init__.py
    Foo.py
  dirBar\
    __init__.py
    Bar.py

然后,从Foo.py你应该能够做到:

import dirFoo.Foo

Or:

from dirFoo.Foo import FooObject

根据Tom的评论,这确实需要通过site_packages或搜索路径访问src文件夹。此外,正如他所提到的,__init__.py是在您第一次导入该包/目录中的模块时隐式导入的。通常__init__.py只是一个空文件。

其他回答

确保dirBar具有__init__.py文件——这会将一个目录放入Python包中。

您还可以将子目录添加到Python路径中,以便将其作为普通脚本导入。

import sys
sys.path.insert(0, <path to dirFoo>)
import Bar

只需使用:从Desktop.filename导入一些内容

例子:

给定目录中的文件名为test.py用户/用户/桌面,并将导入所有内容。

代码:

from Desktop.test import *

但请确保在该目录中创建一个名为“__init__.py”的空文件

另一个解决方案是安装py-require包,然后在Foo.py中使用以下内容

import require
Bar = require('./dirBar/Bar')

添加__init__.py文件:

dirFoo\
    Foo.py
    dirBar\
        __init__.py
        Bar.py

然后将以下代码添加到Foo.py的开头:

import sys
sys.path.append('dirBar')
import Bar