conda虚拟环境安装Django后运行脚本仍提示ModuleNotFoundError求助
我之前也碰到过一模一样的情况,明明虚拟环境里装了Django,直接进Python交互模式能导入,但一跑脚本就报ModuleNotFoundError,大概率是脚本调用的Python解释器不是你激活的虚拟环境里的那个,给你几个排查和解决的步骤:
1. 确认脚本使用的Python解释器路径
首先,在已经激活MyDjangoEnv的控制台里,先拿到虚拟环境的Python路径:
- Mac/Linux 运行:
which python - Windows 运行:
where python
你会得到类似这样的路径:/Users/xxx/miniconda3/envs/MyDjangoEnv/bin/python(Mac)或者C:\Users\xxx\miniconda3\envs\MyDjangoEnv\Scripts\python.exe(Windows)
然后在你的pop_script.py脚本最顶部加上一行shebang(仅限Mac/Linux):
#!/Users/xxx/miniconda3/envs/MyDjangoEnv/bin/python
这样脚本会强制使用这个路径下的Python解释器,也就是你装了Django的虚拟环境版本。
2. 直接用虚拟环境Python路径运行脚本
如果不想改脚本,也可以直接用虚拟环境的Python来执行脚本,比如:
/Users/xxx/miniconda3/envs/MyDjangoEnv/bin/python pop_script.py
这样能确保百分百用的是虚拟环境里的Python,不会和系统默认的混淆。
3. 对比交互模式和脚本的Python路径
如果还是不确定,你可以在脚本里加两行代码:
import sys print("脚本使用的Python路径:", sys.executable)
然后先在激活环境的控制台里直接运行Python,输入同样的代码,对比两个路径是否一致。如果不一样,说明运行脚本时没用到虚拟环境的Python,这时候就要检查你的终端环境是不是真的激活了MyDjangoEnv,或者有没有其他工具(比如IDE)自动切换了环境。
4. 确认Django确实装在虚拟环境里
最后再确认下,激活环境后运行pip list,看看列表里有没有Django,版本是不是你安装的那个,避免不小心装到系统环境里去了。
内容的提问来源于stack exchange,提问作者nostradamus

