VS Code中Python子目录自动补全失效及导入错误求助
问题解决:Revit自定义Python库VS Code自动补全及导入问题
目标
为在Autodesk Revit中运行的自定义Python库,配置VS Code代码自动补全功能。
项目结构
├── my_directory │ ├── script1.py │ └── subdirectory │ └── script2.py └── lib ├── __init__.py ├── example.py └── converter ├── __init__.py └── converter_script.py
已执行操作
- 在项目根目录创建
.env文件,内容为:PYTHONPATH=${PYTHONPATH}:${workspaceFolder}/lib - 在项目根目录创建
settings.json,内容为:
{ "python.envFile": "${workspaceFolder}/.env", "python.autoComplete.extraPaths": [ "${workspaceFolder}/lib" ] }
- 在电脑全局环境变量中添加
lib目录路径
问题
希望在my_directory下的脚本中导入lib中的代码,目前仅example.py可正常导入、自动补全且能在Revit中运行;但导入converter_script.py时无自动补全,运行时出现错误:
ImportError: No module named converter_script
已在converter目录的__init__.py中添加了函数导入,求无需每次新增脚本或子目录都重新配置的解决方案。
script1.py 内容
from example import test_print # 正常工作 from converter_script import converter_print # 无法工作 converter_print() test_print() print('hola mundo')
解决方案
- 修正导入路径
converter_script.py属于lib/converter子包,不能直接顶级导入,两种正确方式:
- 从包路径导入模块:
from converter.converter_script import converter_print - 利用
converter/__init__.py导出的符号直接导入:
如果你已经在converter/__init__.py中写了from .converter_script import converter_print,可简化为:from converter import converter_print
确保包结构规范
所有子目录必须包含__init__.py文件(你已配置),Python才会将其识别为可导入的包,无需额外配置新目录。VS Code自动补全修复
当前配置已经支持自动识别所有子包,若补全失效:
- 按
Ctrl+Shift+P选择「Reload Window」重启编辑器 - 或选择「Python: Clear Cache and Reload Window」清除语言服务器缓存
- Revit运行环境兜底
如果全局环境变量在Revit中未生效,可在脚本开头手动添加路径(优先用环境变量,此为备用方案):
import sys import os # 脚本位于my_directory,向上一级找到lib目录 sys.path.append(os.path.join(os.path.dirname(__file__), '../lib'))
内容的提问来源于stack exchange,提问作者IdoBa
相关产品推荐
相关产品推荐

