导入自定义模块时出现ImportError

17 投票
2 回答
29854 浏览
提问于 2025-04-16 16:56

注意,我在Stack Overflow上搜索过这个错误,虽然有很多类似的问题,但我没有找到一个能解决我这个具体问题的。

我正在做一个Python模块,结构大致是这样的:

/com
    /company
        /foo
        /bar

我在bar目录下编辑一个源文件,想要导入在foo目录里的类。我尝试了以下几种导入方式:

from com.company.foo import *
from company.foo import *
from foo import *
import com.company.foo
import company.foo
import foo

每种方式都会产生类似的错误:

ImportError: no module named com.company.foo

我在每个目录里都有__init__.py文件,包括那个包含com的目录。

我不太确定自己哪里出错了,提前谢谢你的帮助!

2 个回答

1

可以理解为从 .foo 这个文件里导入所有的内容。至少在 Python 2.7 及更高版本中是这样。

17

包含 /com 的文件夹需要被添加到 Python 的路径中。你可以通过几种方式来做到这一点:

  1. 在命令行中,每次都这样做:

    user@host:~$ PYTHONPATH=/path/to/whatever python some_file.py

  2. 在你的 shell 配置文件中(比如 .bashrc.bash_profile 等):

    export PYTHONPATH=/path/to/whatever

  3. 在 Python 代码中(我不推荐这样做,因为这不是一个好的习惯):

    import sys
    sys.path.append('/path/to/whatever')

正如一些评论者所说,通常这个问题会由容器(比如 mod_wsgi 等)来处理,或者由你的启动脚本/主脚本来处理(这个脚本可能会执行类似于选项 #3 的操作,或者可能是在像选项 #1 或 #2 这样的环境中被调用)

撰写回答