Python 在包含 __init__.py 的文件夹中找不到我的自定义模块



虽然有多个关于自定义模块未发现错误的堆栈溢出的帖子,但是这些解决方案(例如这个)在我的情况下没有帮助。

我的文件夹结构如下:

project
|-- app
|   |-- script.py
|-- src
|   |-- __init__.py
|   |-- file.py

在我的script.py中我有这个代码

import pandas as pd
import streamlit as st
from project.src.file import func

在windows7机器上使用VS Code,我将目录更改为project,并激活了conda虚拟环境,然后执行代码streamlit run appscript.py,我得到了这个错误

ModuleNotFoundError: No module named 'project'

将脚本更改为from src.file import func导致此错误

ModuleNotFoundError: No module named 'src'
谁能解释一下发生了什么事?为什么Python找不到我的自定义模块,即使我在文件夹src中有所需的__init__.py.

您需要将script.py中的导入更改为

from src.file import func
并在项目目录下使用 运行它
python -m app.script

因为你使用的是streamlit,显然它不支持运行模块,你可以尝试这个Github问题提供的方法:

  1. 在项目目录中创建一个名为run.py的文件,其中包含以下内容:
import runpy
runpy.run_module("app.script", run_name="__main__", alter_sys=True)
  1. 运行streamlit命令:
streamlit run run.py

原来我的VS Code中的python解释器不知道我的project文件夹的路径。

按照这个建议,我在VS代码中设置PYTHONPATH如下:

set PYTHONPATH=%PYTHONPATH%;pathtothefolderproject

使用script.py中的代码作为from src.file import func.

命令streamlit run appscript.py正常工作。

最新更新