解决在使用VSCode和Python时,自定义库时出现 No module Named '...'
的问题
问题描述
当我们有以下项目结构时。
├── package
│ ├── __init__.py
│ └── utils.py
└── script
└── test.py
其中package
中是我们自己写的库,其中utils.py
和__init__.py
文件如下
from .utils import add, mul
def add(a, b):
return a + b
def mul(a, b):
return a * b
另外我们还有一个脚本文件夹,用来做一些测试等
from package import add
print(add(1, 4))
当我们运行test.py
时,会出现No module named 'package'
报错
原因分析
我们修改一下test.py
的内容
import sys
print(sys.path)
from package import add
print(add(1, 4))
运行,依旧报错No module named 'package',
但是我们打印出来了sys.path
['/Users/jay/SpaceForCode/test/未命名文件夹/script',
'/opt/homebrew/Caskroom/miniconda/base/lib/python310.zip',
'/opt/homebrew/Caskroom/miniconda/base/lib/python3.10',
'/opt/homebrew/Caskroom/miniconda/base/lib/python3.10/lib-dynload',
'/Users/jay/.local/lib/python3.10/site-packages',
'/opt/homebrew/Caskroom/miniconda/base/lib/python3.10/site-packages']
可以看到sys.path中并未有我们当前项目文件夹,虽然有/Users/jay/SpaceForCode/test/未命名文件夹/script
文件夹,但是我们的package
库并不在该文件夹下,所以一定会有No module named ' package'
如何解决
- 手动添加项目文件夹路径到
sys.path
中
import sys
import pathlib
sys.path.append(str(pathlib.Path(__file__).parent.parent.resolve()))
print(sys.path)
from package import add
print(add(1, 4))
此时我们可以看到我们的项目文件夹路径已经被添加到sys.path
中,程序也可以正常运行
- 当我们使用VSCode时,可以添加
.env
文件添加PYTHONPATH
环境变量。- 首先确认已经配置环境变量文件的绝对路径
2. 在项目文件夹下创建.env文件,写入环境变量`PYTHONPATH=your-work-space-folder-path`
3. 重新加载vscode窗口并且重新关闭已经打开的终端并重新打开终端以加载环境变量文件
4. 运行即可
- 调试运行
- 创建launch文件,launch文件中默认会使用项目文件夹下的.env环境变量文件,然后直接F5运行指定py文件即可
- 修改工作区终端环境变量配置文件(不同平台使用不同的配置),然后重载vscode窗口并且重新打开终端即可