VSCode虚拟环境下自定义模块导入报错:AttributeError/ImportError
问题排查与解决方案
1. 检查自定义脚本的函数定义
确认你的crypto.py里的encrypt函数是全局定义的——别把它放在if __name__ == "__main__":代码块里,这个块内的代码只有直接运行crypto.py时才会执行,外部导入时无法访问。同时核对函数名拼写是否和调用时完全一致(大小写、下划线都不能出错)。
2. 避免与第三方库重名
Python生态里有个常用加密库pycryptodome(旧版为pycrypto),如果你的虚拟环境中安装了这个库,Python导入时会优先加载系统/虚拟环境内的官方crypto模块,而非你自己写的同目录脚本。解决办法:把你的crypto.py改个名字,比如my_crypto.py,再用import my_crypto或from my_crypto import encrypt导入。
3. 确认运行时的工作目录
有时候IDE或终端的工作目录并非脚本所在的C:\Users\nano\virtual,导致Python找不到同目录模块。可以在主脚本开头加代码验证:
import os print(os.getcwd())
如果输出不是目标路径,要么手动切换工作目录到C:\Users\nano\virtual,要么在主脚本临时添加路径:
import sys sys.path.insert(0, "C:\\Users\\nano\\virtual")
4. 检查虚拟环境的包冲突
在虚拟环境的终端执行以下命令,查看是否安装了同名加密库:
pip list | findstr crypto
如果看到pycrypto、cryptography这类结果,要么卸载该包(pip uninstall pycrypto),要么重命名自己的脚本。
5. 清除Python缓存文件
Python会生成.pyc缓存文件,有时缓存会导致导入异常。找到脚本目录下的__pycache__文件夹,删除里面所有文件后重新运行主脚本。
内容的提问来源于stack exchange,提问作者GrozniV
相关产品推荐
相关产品推荐

