在同一文件夹中从文件中导入函数。
在同一文件夹中从文件中导入函数。
我正在根据一个教程使用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'
我不明白问题在哪里,因为这两个文件都在同一个文件夹中。
在上述代码中,存在一个从同一文件夹中导入函数的问题。当我们在一个文件中想要导入同一文件夹中的另一个文件中的函数时,我们可以使用import语句或from...import语句。然而,如果我们尝试从同一文件夹中的另一个文件中导入函数时出现了问题,我们可以通过以下方法解决。
问题的原因是当app.py文件不是从同一文件夹中调用时,无法直接导入同一文件夹中的另一个文件中的函数。这可能是因为Python解释器无法找到同一文件夹中的其他文件。
为了解决这个问题,我们可以使用os模块中的abspath和dirname函数来获取当前脚本的文件夹路径。然后,我们可以将该路径添加到sys.path中,以使Python解释器能够找到同一文件夹中的其他文件。
下面是解决该问题的代码示例:
# 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
以上代码将获取当前脚本的文件夹路径,并将其添加到sys.path中。这样,Python解释器就能够找到同一文件夹中的其他文件,并且我们可以通过import或from...import语句导入并调用其中的函数。
通过上述解决方法,我们可以成功地从同一文件夹中的另一个文件中导入函数,并在当前文件中使用它们。无论我们是使用import语句还是from...import语句,我们都可以按照正常的方式调用导入的函数。
这是一个简单而有效的方法,可以解决从同一文件夹中导入函数时的问题,并确保我们可以顺利地使用这些函数。
在同一文件夹中导入文件的函数或类时,可以使用以下方法:
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
。所以,使用's的答案更合适。
_Zaszuś,在尝试了macdrai的答案后,我无法导入,使用这个解决方案后,我得到了相同的错误。
如果在第一种情况下不需要"app",这是一个很好的解决方案。
在同一文件夹中,从另一个文件中导入函数的问题,可能出现的原因是文件路径的设置不正确。在Python中,当我们想要从同一文件夹中的另一个文件中导入函数时,需要确保文件路径正确。
解决这个问题的方法是使用正确的文件路径来导入函数。下面是两种常见的解决方法:
第一种方法是使用import
语句来导入函数。可以使用以下代码来实现:
import app.config as Config
这将从同一文件夹中的app
文件夹中的config.py
文件中导入Config
函数。
第二种方法是使用from
语句来导入函数。可以使用以下代码来实现:
from app import config as Config
这将从同一文件夹中的app
文件夹中导入config.py
文件,并将其中的Config
函数命名为Config
。
根据个人的编码风格,可以选择适合自己的导入方法。无论是使用import
还是from
语句,都需要确保文件路径正确,这样才能成功导入函数。