从同一文件夹中的文件导入功能
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文件导入类
将Python导入函数从另一个目录导入文件,然后从另一个目录导入另一个函数