【问题标题】: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

标签: python python-3.x flask


【解决方案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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-05-21
      • 2015-01-12
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多