You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

Python文件组织引发的“No Module named”错误解决咨询

Python文件组织引发的“No Module named”错误解决咨询

你遇到的这个模块导入问题在Python项目里超级常见,先帮你再明确下当前的项目结构:

src
|
----folder1
     |------file.py
----folder2
     |------file2.py

当你在folder2/file2.py里执行这句导入代码时:

from folder1.file import *

触发了No Module Named Error,本质是Python解释器的模块搜索路径里找不到folder1所在的src目录,下面给你几个实用的解决思路:

  • 给目录添加模块标识文件
    folder1folder2这两个目录里,各新建一个空的__init__.py文件(Python 3.3+之后支持无此文件的命名空间包,但加这个文件能让项目在更多环境下兼容),修改后的结构如下:

    src
    |
    ----folder1
         |------__init__.py
         |------file.py
    ----folder2
         |------__init__.py
         |------file2.py
    
  • 在代码中临时添加搜索路径
    如果你不想改项目结构,可以在file2.py的最开头加上这段代码,把src目录的绝对路径手动加入Python的搜索路径:

    import sys
    import os
    
    # 计算src目录的绝对路径:当前文件的父目录的父目录
    src_dir = os.path.abspath(os.path.join(os.path.dirname(__file__), ".."))
    if src_dir not in sys.path:
        sys.path.append(src_dir)
    
    # 现在再执行导入就没问题了
    from folder1.file import *
    

    这种方式适合快速调试临时用。

  • 通过环境变量指定搜索路径
    可以在运行脚本前,把src目录的路径设置到PYTHONPATH环境变量里,这样Python会自动去这个路径下找模块:

    • Linux/macOS终端执行:
      export PYTHONPATH=/你的实际路径/src:$PYTHONPATH
      python src/folder2/file2.py
      
    • Windows命令行执行:
      set PYTHONPATH=C:\你的实际路径\src;%PYTHONPATH%
      python src\folder2\file2.py
      
  • 规范项目的运行入口
    更推荐的正式项目做法是在src目录下新建一个主入口文件,比如main.py,然后通过这个入口来调用各个模块的功能:

    # src/main.py
    from folder2.file2 import 你需要的函数或类
    
    # 这里写业务逻辑
    if __name__ == "__main__":
        # 执行你的代码
        pass
    

    然后从src目录的父目录运行这个入口文件:

    python src/main.py
    

    这种方式能从根源上避免模块路径问题,也更符合Python项目的结构规范。

备注:内容来源于stack exchange,提问作者Rishabh Agarwal

火山引擎 最新活动