WSL环境中Pycharm的python控制台中报错 ModuleNotFoundError: No module named ‘xxx‘(WSL+Pycharm环境搭建系列之四)

WSL环境中Pycharm的python控制台中报错 ModuleNotFoundError: No module named 'xxx'

0.前言

经过前面几次的努力,我们基本上完成了环境中的搭建
本次我们解决一个基本上都会遇到的一个问题
那就是在WSL环境中运行python控制台调试django,控制台会报错: ModuleNotFoundError: No module named ‘xxx’

1.问题现象

其中的xxx是项目的名称,这里是csdntestdjango

/venv/csdntestdjango/bin/python /mnt/d/Program Files/JetBrains/PyCharm 2022.1.3/plugins/python/helpers/pydev/pydevconsole.py --mode=client --host=127.0.0.1 --port=41977 
import sys; print('Python %s on %s' % (sys.version, sys.platform))
import django; print('Django %s' % django.get_version())
sys.path.extend(['F:\\localgit\\csdntestdjango', 'D:\\Program Files\\JetBrains\\PyCharm 2022.1.3\\plugins\\python\\helpers\\pycharm', 'D:\\Program Files\\JetBrains\\PyCharm 2022.1.3\\plugins\\python\\helpers\\pydev'])
if 'setup' in dir(django): django.setup()
import django_manage_shell; django_manage_shell.run("F:/localgit/csdntestdjango")
PyDev console: starting.
Python 3.9.9 (main, Dec  7 2022, 13:29:41) 
[GCC 4.8.5 20150623 (Red Hat 4.8.5-44)] on linux
Django 3.2.11
Traceback (most recent call last):
  File "/mnt/d/Program Files/JetBrains/PyCharm 2022.1.3/plugins/python/helpers/pydev/pydevconsole.py", line 364, in runcode
    coro = func()
  File "<input>", line 6, in <module>
  File "/venv/csdntestdjango/lib/python3.9/site-packages/django/__init__.py", line 19, in setup
    configure_logging(settings.LOGGING_CONFIG, settings.LOGGING)
  File "/venv/csdntestdjango/lib/python3.9/site-packages/django/conf/__init__.py", line 82, in __getattr__
    self._setup(name)
  File "/venv/csdntestdjango/lib/python3.9/site-packages/django/conf/__init__.py", line 69, in _setup
    self._wrapped = Settings(settings_module)
  File "/venv/csdntestdjango/lib/python3.9/site-packages/django/conf/__init__.py", line 170, in __init__
    mod = importlib.import_module(self.SETTINGS_MODULE)
  File "/opt/python39/lib/python3.9/importlib/__init__.py", line 127, in import_module
    return _bootstrap._gcd_import(name[level:], package, level)
  File "<frozen importlib._bootstrap>", line 1030, in _gcd_import
  File "<frozen importlib._bootstrap>", line 1007, in _find_and_load
  File "<frozen importlib._bootstrap>", line 972, in _find_and_load_unlocked
  File "<frozen importlib._bootstrap>", line 228, in _call_with_frames_removed
  File "<frozen importlib._bootstrap>", line 1030, in _gcd_import
  File "<frozen importlib._bootstrap>", line 1007, in _find_and_load
  File "<frozen importlib._bootstrap>", line 984, in _find_and_load_unlocked
ModuleNotFoundError: No module named 'csdntestdjango'

2. 问题分析

聚焦这两行

sys.path.extend(['F:\\localgit\\csdntestdjango', 'D:\\Program Files\\JetBrains\\PyCharm 2022.1.3\\plugins\\python\\helpers\\pycharm', 'D:\\Program Files\\JetBrains\\PyCharm 2022.1.3\\plugins\\python\\helpers\\pydev'])
if 'setup' in dir(django): django.setup()
import django_manage_shell; django_manage_shell.run("F:/localgit/csdntestdjango")

所有的路径都是Windows的路径,而非Linux路径,而我们的控制台实际上启动在WSL环境中

3. 解决办法

打开django控制台设置,添加路径映射

django控制台
映射的规则大致是F:盘对应/mnt/f,其他路径与windows一致,相当于将windows文件系统挂载到了WSL子系统中(用于运行程序)
路径映射
确定后重启python控制台,不再报该错误。但是报了新的错误,这个错误与外置配置文件相关,没有做外置文件配置的可忽略

/venv/csdntestdjango/bin/python /mnt/d/Program Files/JetBrains/PyCharm 2022.1.3/plugins/python/helpers/pydev/pydevconsole.py --mode=client --host=127.0.0.1 --port=44923 
import sys; print('Python %s on %s' % (sys.version, sys.platform))
import django; print('Django %s' % django.get_version())
sys.path.extend(['/mnt/f/localgit/csdntestdjango', '/mnt/d/Program Files/JetBrains/PyCharm 2022.1.3/plugins/python/helpers/pycharm', '/mnt/d/Program Files/JetBrains/PyCharm 2022.1.3/plugins/python/helpers/pydev'])
if 'setup' in dir(django): django.setup()
import django_manage_shell; django_manage_shell.run("/mnt/f/localgit/csdntestdjango")
PyDev console: starting.
Python 3.9.9 (main, Dec  7 2022, 13:29:41) 
[GCC 4.8.5 20150623 (Red Hat 4.8.5-44)] on linux
Django 3.2.11
Traceback (most recent call last):
  File "/mnt/d/Program Files/JetBrains/PyCharm 2022.1.3/plugins/python/helpers/pydev/pydevconsole.py", line 364, in runcode
    coro = func()
  File "<input>", line 6, in <module>
  File "/venv/csdntestdjango/lib/python3.9/site-packages/django/__init__.py", line 19, in setup
    configure_logging(settings.LOGGING_CONFIG, settings.LOGGING)
  File "/venv/csdntestdjango/lib/python3.9/site-packages/django/conf/__init__.py", line 82, in __getattr__
    self._setup(name)
  File "/venv/csdntestdjango/lib/python3.9/site-packages/django/conf/__init__.py", line 69, in _setup
    self._wrapped = Settings(settings_module)
  File "/venv/csdntestdjango/lib/python3.9/site-packages/django/conf/__init__.py", line 170, in __init__
    mod = importlib.import_module(self.SETTINGS_MODULE)
  File "/opt/python39/lib/python3.9/importlib/__init__.py", line 127, in import_module
    return _bootstrap._gcd_import(name[level:], package, level)
  File "<frozen importlib._bootstrap>", line 1030, in _gcd_import
  File "<frozen importlib._bootstrap>", line 1007, in _find_and_load
  File "<frozen importlib._bootstrap>", line 986, in _find_and_load_unlocked
  File "<frozen importlib._bootstrap>", line 680, in _load_unlocked
  File "<frozen importlib._bootstrap_external>", line 850, in exec_module
  File "<frozen importlib._bootstrap>", line 228, in _call_with_frames_removed
  File "/mnt/f/localgit/csdntestdjango/csdntestdjango/settings.py", line 16, in <module>
    conf = json.load(open("config/config.json", "r", encoding="utf-8"))
FileNotFoundError: [Errno 2] No such file or directory: 'config/config.json'

其实这个问题之前我有另一篇帖子已经讲的很清楚了,这里不详细解释。
解决该问题非常简单 只需要在django控制台设置中,正在启动脚本开头添加一句

import os; os.chdir([WORKING_DIR_AND_PYTHON_PATHS][0])

django控制台正在启动脚本
完成设置后,关闭django控制台,重新打开,完美运行。
这里需要注意一下,需要重新打开控制台,点击重新运行或者ctrl+F5没有任何作用。
在这里插入图片描述

如果你觉得我的文章还不错,确实解决了您的一些问题的话,麻烦点个赞、收藏、加粉丝,如果有什么问题可以在评论区交流,我将及时答复或者做出修正,谢谢!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Melody Chaser

所有打赏收入将全部捐赠给我娃

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值