Ubuntu系统使用Linux版本Pycham开发django,启动Python控制台出现报错问题

10 篇文章 0 订阅
8 篇文章 0 订阅

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档


问题现象(及废话)

在做一个ansible+django的开发项目,因为ansible只支持运行在linux系统中,故而入了ubuntu的坑。
安装了Linxu版本的Pycharm专业版(社区版python控制台没有django支持,所以应该不存在此问题),起初相安无事使用pycharm的控制台调试django项目乐此不疲,Pycharm提示更新,不免点击升级尝鲜。
升级之后进入python控制台报错,因为我在django的setting.py引入了项目里的一个json文件,提示该文件不存在,但是文件明明就躺在那里一动不动。报错如下:

/home/melody/PycharmProjects/venv/ops/bin/python /home/melody/pycharm/plugins/python/helpers/pydev/pydevconsole.py --mode=client --host=127.0.0.1 --port=44397 
import sys; print('Python %s on %s' % (sys.version, sys.platform))
import django; print('Django %s' % django.get_version())
sys.path.extend(['/home/melody/PycharmProjects/ops', '/home/melody/pycharm/plugins/python/helpers/pycharm', '/home/melody/pycharm/plugins/python/helpers/pydev'])
if 'setup' in dir(django): django.setup()
import django_manage_shell; django_manage_shell.run("/home/melody/PycharmProjects/ops")
PyDev console: starting.
Python 3.10.4 (main, Jun 29 2022, 12:14:53) [GCC 11.2.0] on linux
Django 3.2.11
Traceback (most recent call last):
  File "/usr/lib/python3.10/code.py", line 90, in runcode
    exec(code, self.locals)
  File "<input>", line 6, in <module>
  File "/home/melody/PycharmProjects/venv/ops/lib/python3.10/site-packages/django/__init__.py", line 19, in setup
    configure_logging(settings.LOGGING_CONFIG, settings.LOGGING)
  File "/home/melody/PycharmProjects/venv/ops/lib/python3.10/site-packages/django/conf/__init__.py", line 82, in __getattr__
    self._setup(name)
  File "/home/melody/PycharmProjects/venv/ops/lib/python3.10/site-packages/django/conf/__init__.py", line 69, in _setup
    self._wrapped = Settings(settings_module)
  File "/home/melody/PycharmProjects/venv/ops/lib/python3.10/site-packages/django/conf/__init__.py", line 170, in __init__
    mod = importlib.import_module(self.SETTINGS_MODULE)
  File "/usr/lib/python3.10/importlib/__init__.py", line 126, in import_module
    return _bootstrap._gcd_import(name[level:], package, level)
  File "<frozen importlib._bootstrap>", line 1050, in _gcd_import
  File "<frozen importlib._bootstrap>", line 1027, in _find_and_load
  File "<frozen importlib._bootstrap>", line 1006, in _find_and_load_unlocked
  File "<frozen importlib._bootstrap>", line 688, in _load_unlocked
  File "<frozen importlib._bootstrap_external>", line 883, in exec_module
  File "<frozen importlib._bootstrap>", line 241, in _call_with_frames_removed
  File "/home/melody/PycharmProjects/ops/itam/settings.py", line 17, in <module>
    conf = json.load(open("config/config.json", "r", encoding="utf-8"))
FileNotFoundError: [Errno 2] No such file or directory: 'config/config.json'

问题排查

首先对着Pycharm乱点一通,没有毛用,就不详细说了。
有用的排查是这样,首先既然提示找不到文件,将项目因为文件改为绝对路径尝试,open成功不截图了。
那么就说明python控制台当前路径不再是当前项目路径,为了验证我的想法,作以下测试。

>>>import os
>>>print(os.getcwd())
/home/melody

果不其然,新版本的python控制台并不是当前项目路径,而是跑到了home路径下。
既然如此,问题就好解决了。

解决办法

1、打开 文件 - 设置
2、设置 中 找到 构建,执行,部署 - 控制台 - Django控制台
3、默认启动脚本是这么写的

import sys; print('Python %s on %s' % (sys.version, sys.platform))
import django; print('Django %s' % django.get_version())
sys.path.extend([WORKING_DIR_AND_PYTHON_PATHS])
if 'setup' in dir(django): django.setup()
import django_manage_shell; django_manage_shell.run(PROJECT_ROOT)

4、在最前面加入 import os; os.chdir([WORKING_DIR_AND_PYTHON_PATHS][0])

import os; os.chdir([WORKING_DIR_AND_PYTHON_PATHS][0])  
import sys; print('Python %s on %s' % (sys.version, sys.platform))
import django; print('Django %s' % django.get_version())
sys.path.extend([WORKING_DIR_AND_PYTHON_PATHS])
if 'setup' in dir(django): django.setup()
import django_manage_shell; django_manage_shell.run(PROJECT_ROOT)

5、应用配置后,关掉控制台, 重新打开python控制台,问题解决

/home/melody/PycharmProjects/venv/ops/bin/python /home/melody/pycharm/plugins/python/helpers/pydev/pydevconsole.py --mode=client --host=127.0.0.1 --port=38087 
import os; os.chdir(['/home/melody/PycharmProjects/ops', '/home/melody/pycharm/plugins/python/helpers/pycharm', '/home/melody/pycharm/plugins/python/helpers/pydev'][0])  
import sys; print('Python %s on %s' % (sys.version, sys.platform))
import django; print('Django %s' % django.get_version())
sys.path.extend(['/home/melody/PycharmProjects/ops', '/home/melody/pycharm/plugins/python/helpers/pycharm', '/home/melody/pycharm/plugins/python/helpers/pydev'])
if 'setup' in dir(django): django.setup()
import django_manage_shell; django_manage_shell.run("/home/melody/PycharmProjects/ops")
PyDev console: starting.
Python 3.10.4 (main, Jun 29 2022, 12:14:53) [GCC 11.2.0] on linux
Django 3.2.11

>>>

总结

问题的主要原因是pycharm的linux版本在某个版本升级之后修改了,控制台启动的当前路径为home,而非当前项目路径。
升级后的版本分享一下,可能不只是这个最新的版本有问题,前几个版本也许就出现这个机制了。

PyCharm 2022.2.3 (Professional Edition)
Build #PY-222.4345.23, built on October 10, 2022
Licensed to Melody Chaser
订阅有效期至 202328日。
Runtime version: 17.0.4.1+7-b469.62 amd64
VM: OpenJDK 64-Bit Server VM by JetBrains s.r.o.
Linux 5.15.0-47-generic
GC: G1 Young Generation, G1 Old Generation
Memory: 1986M
Cores: 8
Non-Bundled Plugins:
    com.intellij.zh (222.202)

Current Desktop: ubuntu:GNOME
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

Melody Chaser

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

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

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

打赏作者

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

抵扣说明:

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

余额充值