虽然有多个关于自定义模块未发现错误的堆栈溢出的帖子,但是这些解决方案(例如这个)在我的情况下没有帮助。
我的文件夹结构如下:
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问题提供的方法:
- 在项目目录中创建一个名为run.py的文件,其中包含以下内容:
import runpy
runpy.run_module("app.script", run_name="__main__", alter_sys=True)
- 运行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
正常工作。