从同一文件夹中的文件导入函数

Zem*_*ian 22 python flask python-3.x

我正在根据不同的导入规则在教程之后使用Python 3.5构建Flask应用程序.通过查找类似的问题,我设法通过将文件夹添加到路径来解决基于从嵌套文件夹导入的ImportError,但我仍然无法从同一文件夹(已在路径中)的脚本中导入函数.文件夹结构是这样的:

DoubleDibz  
??? app
?   ??? __init__.py
?   ??? api 
?   ?   ??? __init__.py
?   ?   ??? helloworld.py
?   ??? app.py
?   ??? common
?   ?   ??? __init__.py
?   ?   ??? constants.py
?   ??? config.py
?   ??? extensions.py
?   ??? static
?   ??? templates
??? run.py
Run Code Online (Sandbox Code Playgroud)

在app.py中,我使用以下代码从config.py导入一个函数:

import config as Config
Run Code Online (Sandbox Code Playgroud)

但我得到这个错误:

ImportError: No module named 'config'
Run Code Online (Sandbox Code Playgroud)

我不明白是什么问题,是同一个文件夹中的两个文件.提前致谢

小智 25

你有没有尝试过

import app.config as Config
Run Code Online (Sandbox Code Playgroud)

它为我做了伎俩.

  • 或者`从app import config as Config`取决于你的编码风格 (4认同)

小智 13

要从同一文件夹导入,您可以执行以下操作:

from .config import function_or_class_in_config_file
Run Code Online (Sandbox Code Playgroud)

或者按照您的要求导入带有别名的完整配置:

from ..app import config as Config
Run Code Online (Sandbox Code Playgroud)


ste*_*stt 5

# imports all functions    
import config
# you invoke it this way
config.my_function()
Run Code Online (Sandbox Code Playgroud)

或者

# import specific function
from config import my_function
# you invoke it this way
my_function()
Run Code Online (Sandbox Code Playgroud)

如果 app.py 不是从同一个文件夹中调用的,您可以执行以下操作:

# csfp - current_script_folder_path
csfp = os.path.abspath(os.path.dirname(__file__))
if csfp not in sys.path:
    sys.path.insert(0, csfp)
# import it and invoke it by one of the ways described above
Run Code Online (Sandbox Code Playgroud)