如何根据相对路径导入Python模块?
例如,如果dirFoo包含Foo.py和dirBar,和dirBar包含Bar.py,我怎么导入Bar.py到Foo.py?
这是一个直观的表示:
dirFoo\
Foo.py
dirBar\
Bar.py
Run Code Online (Sandbox Code Playgroud)
Foo希望包括Bar,但重组文件夹层次结构不是一种选择.
我不清楚如何正确地命名这个问题.
情况1
假设我有以下目录结构.
foo
|
+- bar/__init__.py
|
+- bar.py
Run Code Online (Sandbox Code Playgroud)
如果我有
from foo import bar
Run Code Online (Sandbox Code Playgroud)
我如何知道导入哪个栏(bar.py或bar/__init__.py)?有没有简单的方法来自动检测这种情况?
案例2
foo
|
+- foo.py
|
+- other.py
Run Code Online (Sandbox Code Playgroud)
如果other.py有这条线
import foo
Run Code Online (Sandbox Code Playgroud)
我怎么知道导入哪个foo(foo或foo.foo)?再一次,是否有任何简单的方法来自动检测这种情况?
我的Flask项目的结构如下:
my_project
?
??? app
? ??? __init__.py
? ??? api
? ??? static
? ??? templates
??? config.py
??? run.py
Run Code Online (Sandbox Code Playgroud)
app / __ init__.py:
from flask import Flask
app = Flask(__name__)
app.config.from_object('config')
Run Code Online (Sandbox Code Playgroud)
运行
from app import app
app.run(
host=app.config.get('HOST', '0.0.0.0'),
port=app.config.get('PORT', 5000)
)
Run Code Online (Sandbox Code Playgroud)
这以前曾奏效,但是我试图将我的项目从Python 2迁移到Python 3,并且python run.py不再运行。我收到以下错误:
Traceback (most recent call last):
File "/Users/rasmi/Projects/my_project/run.py", line 3, in <module>
app.run(
AttributeError: module 'app' has no attribute 'run'
Run Code Online (Sandbox Code Playgroud)
如果我更改导入样式run.py以匹配此处的样式:
from .app import app
app.run( …Run Code Online (Sandbox Code Playgroud)