从父目录导入模块

8

请看我的文件结构:

main/
    main.py
    __init__.py

    mysql/
        read.py
        __init__.py

    conf/
        mysql.py
        loc.py
        __init__.py

conf/mysql.py 包含了一个 MySQL 服务器的信息(端口、主机名等)。

read.py 用于连接到 conf/mysql.py 中指定的服务器,从 MySQL 数据库中获取并读取值。

我想实现的是让 read.py 导入 conf/mysql.py ,所以我尝试了:

from conf import mysql
import main.conf.mysql

两个都不起作用。它给了我“ImportError: No Module Name 'main'”和“ImportError: No Module Named 'conf'”,只有在“main.py”中,导入“conf/mysql.py”才有效。
我知道将“sys.path”附加到末尾会起作用,但出于某些原因,我不想这样做。
有什么解决办法来解决这个问题吗?先谢谢您,对于这个复杂的问题,我很抱歉。

尝试这个:from ../conf import mysql - Muhammad Bilal
@MuhammadBilal 不起作用,Python 说“/”是无效的语法。 - RexLeong
将 main 设为您的当前工作项目目录和 IDE 中的脚本执行路径。这样就可以正常运行了。如果您的代码需要导入模块,不要使用 .sys.path(不良实践)。 - sahasrara62
1
可能是从不同文件夹导入文件的重复问题。 - sahasrara62
@prashantrana 所有的答案都说要添加 sys.path,但我发现通过附加 sys.path 更好,谢谢。 - RexLeong
1个回答

6

由于main目录是项目的根目录,因此在绝对导入中不应包含main

from conf import mysql

或者使用相对导入,您可以这样做:

from ..conf import mysql

谢谢,语法是正确的,但现在它给了我另一个错误:SystemError: Parent module '' not loaded, cannot perform relative import,有什么解决办法吗? - RexLeong
1
你应该从 main.py 运行你的项目,并在 main.py 中使用 from mysql import read - blhsing
1
main.py 会调用 read.py 中的函数,所以我需要使用相对导入。顺便说一下,from conf import mysql 是不起作用的。 - RexLeong
相对导入在Python4.*中不起作用。 - Nick

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接