从同一文件夹中的文件导入功能

Posted

技术标签:

【中文标题】从同一文件夹中的文件导入功能【英文标题】:import function from a file in the same folder 【发布时间】:2017-10-07 11:56:32 【问题描述】:

我正在根据不同的导入规则使用 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

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

import config as Config

但我收到此错误:

ImportError: No module named 'config'

我不明白问题出在哪里,因为这两个文件在同一个文件夹中。 在此先感谢

【问题讨论】:

尝试使用“from .import config as Config” 你需要这样做from app import config as Config 【参考方案1】:

你试过了吗

import app.config as Config

它对我有用。

【讨论】:

from app import config as Config 取决于您的编码风格【参考方案2】:
# imports all functions    
import config
# you invoke it this way
config.my_function()

# import specific function
from config import my_function
# you invoke it this way
my_function()

如果 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

【讨论】:

【参考方案3】:

要从同一个文件夹导入,您可以:

from .config import function_or_class_in_config_file

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

from ..app import config as Config

【讨论】:

如果作为脚本启动,这将不起作用。你会得到错误ModuleNotFoundError: No module named '__main__.config'; ' __main__' is not a package 。所以@macdrai 的回答更合适。 @Dr_Zaszuś,当我尝试 macdrai 的答案时无法导入,使用此解决方案时,我遇到了同样的错误 如果在第一种情况下不需要“应用程序”,这是一个很好的解决方案。【参考方案4】:

另一种更短的方法是:

import .config as Config

【讨论】:

以上是关于从同一文件夹中的文件导入功能的主要内容,如果未能解决你的问题,请参考以下文章

Jupyter Notebook从同一目录中的python文件导入类

Perl:同一个文件中的两个包不能导入同一个包?

将Python导入函数从另一个目录导入文件,然后从另一个目录导入另一个函数

如何从 C# 中的子文件夹导入 .dll 库

无法将 Java 项目中的类文件导入同一项目中的另一个类文件

pycharm导入同一文件夹中.py出现错误的解决方案