01bug日记-python3 manage.py

在什么地方出现的这个bug

我在执行python3 manage.py的时候出现的bug

报错信息

Traceback (most recent call last):
  File "manage.py", line 22, in <module>
    main()
  File "manage.py", line 18, in main
    execute_from_command_line(sys.argv)
  File "/usr/local/lib64/python3.6/site-packages/django/core/management/__init__.py", line 419, in execute_from_command_line
    utility.execute()
  File "/usr/local/lib64/python3.6/site-packages/django/core/management/__init__.py", line 395, in execute
    django.setup()
  File "/usr/local/lib64/python3.6/site-packages/django/__init__.py", line 24, in setup
    apps.populate(settings.INSTALLED_APPS)
  File "/usr/local/lib64/python3.6/site-packages/django/apps/registry.py", line 114, in populate
    app_config.import_models()
  File "/usr/local/lib64/python3.6/site-packages/django/apps/config.py", line 301, in import_models
    self.models_module = import_module(models_module_name)
  File "/usr/lib64/python3.6/importlib/__init__.py", line 126, in import_module
    return _bootstrap._gcd_import(name[level:], package, level)
  File "<frozen importlib._bootstrap>", line 994, in _gcd_import
  File "<frozen importlib._bootstrap>", line 971, in _find_and_load
  File "<frozen importlib._bootstrap>", line 955, in _find_and_load_unlocked
  File "<frozen importlib._bootstrap>", line 665, in _load_unlocked
  File "<frozen importlib._bootstrap_external>", line 678, in exec_module
  File "<frozen importlib._bootstrap>", line 219, in _call_with_frames_removed
  File "/usr/local/lib64/python3.6/site-packages/django/contrib/auth/models.py", line 3, in <module>
    from django.contrib.auth.base_user import AbstractBaseUser, BaseUserManager
  File "/usr/local/lib64/python3.6/site-packages/django/contrib/auth/base_user.py", line 48, in <module>
    class AbstractBaseUser(models.Model):
  File "/usr/local/lib64/python3.6/site-packages/django/db/models/base.py", line 122, in __new__
    new_class.add_to_class('_meta', Options(meta, app_label))
  File "/usr/local/lib64/python3.6/site-packages/django/db/models/base.py", line 326, in add_to_class
    value.contribute_to_class(cls, name)
  File "/usr/local/lib64/python3.6/site-packages/django/db/models/options.py", line 207, in contribute_to_class
    self.db_table = truncate_name(self.db_table, connection.ops.max_name_length())
  File "/usr/local/lib64/python3.6/site-packages/django/utils/connection.py", line 15, in __getattr__
    return getattr(self._connections[self._alias], item)
  File "/usr/local/lib64/python3.6/site-packages/django/utils/connection.py", line 62, in __getitem__
    conn = self.create_connection(alias)
  File "/usr/local/lib64/python3.6/site-packages/django/db/utils.py", line 204, in create_connection
    backend = load_backend(db['ENGINE'])
  File "/usr/local/lib64/python3.6/site-packages/django/db/utils.py", line 111, in load_backend
    return import_module('%s.base' % backend_name)
  File "/usr/lib64/python3.6/importlib/__init__.py", line 126, in import_module
    return _bootstrap._gcd_import(name[level:], package, level)
  File "/usr/local/lib64/python3.6/site-packages/django/db/backends/sqlite3/base.py", line 73, in <module>
    check_sqlite_version()
  File "/usr/local/lib64/python3.6/site-packages/django/db/backends/sqlite3/base.py", line 69, in check_sqlite_version
    'SQLite 3.9.0 or later is required (found %s).' % Database.sqlite_version
django.core.exceptions.ImproperlyConfigured: SQLite 3.9.0 or later is required (found 3.7.17).

错误解读1

这个错误信息表明你的 Django 项目正在尝试使用 SQLite 数据库,但是你的系统安装的 SQLite 版本过低(3.7.17),而 Django 需要至少 3.9.0 版本的 SQLite。这通常发生在 Django 尝试连接到数据库时,检查到数据库版本不符合要求。

要解决这个问题,你可以采取以下几种方法:

升级 SQLite:
这可能是最直接的解决方法。你需要查找如何在你的系统上升级 SQLite。这通常涉及到下载最新版本的 SQLite,然后安装或替换旧版本。不过,升级系统级的 SQLite 可能会影响其他依赖旧版本 SQLite 的应用程序,因此请谨慎操作。
使用其他数据库:
如果升级 SQLite 不可行或风险太高,你可以考虑将你的 Django 项目配置为使用其他数据库,如 PostgreSQL、MySQL 或 Oracle。这些数据库通常不需要在系统级别进行复杂的安装或升级。
要更改数据库,你需要修改 Django 的设置文件(通常是 settings.py),在 DATABASES 配置中指定新的数据库引擎、名称、用户、密码等信息。
使用虚拟环境中的 SQLite:
如果你在使用 Python 虚拟环境(如 venv 或 conda),你可以尝试在虚拟环境中安装一个较新版本的 SQLite。这通常涉及到安装一个 SQLite 的 Python 绑定(如 pysqlite 或 sqlite3),这些绑定可能包含较新版本的 SQLite。
注意,标准的 Python 安装通常包含 sqlite3 模块,该模块与系统的 SQLite 库链接。在虚拟环境中安装不同的 SQLite 版本可能需要一些额外的配置或技巧。
检查 Django 版本:
确保你使用的 Django 版本与你的 SQLite 版本兼容。有时候,降低 Django 的版本可以避免这类问题,尽管这通常不是推荐的做法,因为较新的 Django 版本通常包含重要的安全修复和功能改进。
建议首先尝试升级 SQLite 或更改数据库配置,因为这些方法通常可以直接解决问题而不会引入额外的复杂性。如果你不确定如何操作,可以考虑寻求更具体的帮助或咨询有经验的开发者。

简单来说就是Django默认的SQLite数据库版本过低的原因,根据文心一言的提示,我选择了使用其他的数据库MySQL

如何将SQLite修改成为MySQL的呢?

根据AI的提示

  • 要更改数据库,你需要修改 Django 的设置文件(通常是 settings.py),在 DATABASES 配置中指定新的数据库引擎、名称、用户、密码等信息

但是这里因为我已经对Django目录进行了调整

将settings.py改名为origin_settings.py,然后将这个settings修改成了dev.py文件

所以我在寻找的时候应该去这下面去找

当我再次执行python3 manage.py的时候又报错了(小白的无能怒吼。)

错误解读2

Traceback (most recent call last):
  File "/usr/local/lib64/python3.6/site-packages/django/db/backends/mysql/base.py", line 15, in <module>
    import MySQLdb as Database
ModuleNotFoundError: No module named 'MySQLdb'

The above exception was the direct cause of the following exception:

Traceback (most recent call last):
  File "manage.py", line 22, in <module>
    main()
  File "manage.py", line 18, in main
    execute_from_command_line(sys.argv)
  File "/usr/local/lib64/python3.6/site-packages/django/core/management/__init__.py", line 419, in execute_from_command_line
    utility.execute()
  File "/usr/local/lib64/python3.6/site-packages/django/core/management/__init__.py", line 395, in execute
    django.setup()
  File "/usr/local/lib64/python3.6/site-packages/django/__init__.py", line 24, in setup
    apps.populate(settings.INSTALLED_APPS)
  File "/usr/local/lib64/python3.6/site-packages/django/apps/registry.py", line 114, in populate
    app_config.import_models()
  File "/usr/local/lib64/python3.6/site-packages/django/apps/config.py", line 301, in import_models
    self.models_module = import_module(models_module_name)
  File "/usr/lib64/python3.6/importlib/__init__.py", line 126, in import_module
    return _bootstrap._gcd_import(name[level:], package, level)
  File "<frozen importlib._bootstrap>", line 994, in _gcd_import
  File "<frozen importlib._bootstrap>", line 971, in _find_and_load
  File "<frozen importlib._bootstrap>", line 955, in _find_and_load_unlocked
  File "<frozen importlib._bootstrap>", line 665, in _load_unlocked
  File "<frozen importlib._bootstrap_external>", line 678, in exec_module
  File "<frozen importlib._bootstrap>", line 219, in _call_with_frames_removed
  File "/usr/local/lib64/python3.6/site-packages/django/contrib/auth/models.py", line 3, in <module>
    from django.contrib.auth.base_user import AbstractBaseUser, BaseUserManager
  File "/usr/local/lib64/python3.6/site-packages/django/contrib/auth/base_user.py", line 48, in <module>
    class AbstractBaseUser(models.Model):
  File "/usr/local/lib64/python3.6/site-packages/django/db/models/base.py", line 122, in __new__
    new_class.add_to_class('_meta', Options(meta, app_label))
  File "/usr/local/lib64/python3.6/site-packages/django/db/models/base.py", line 326, in add_to_class
    value.contribute_to_class(cls, name)
  File "/usr/local/lib64/python3.6/site-packages/django/db/models/options.py", line 207, in contribute_to_class
    self.db_table = truncate_name(self.db_table, connection.ops.max_name_length())
  File "/usr/local/lib64/python3.6/site-packages/django/utils/connection.py", line 15, in __getattr__
    return getattr(self._connections[self._alias], item)
  File "/usr/local/lib64/python3.6/site-packages/django/utils/connection.py", line 62, in __getitem__
    conn = self.create_connection(alias)
  File "/usr/local/lib64/python3.6/site-packages/django/db/utils.py", line 204, in create_connection
    backend = load_backend(db['ENGINE'])
  File "/usr/local/lib64/python3.6/site-packages/django/db/utils.py", line 111, in load_backend
    return import_module('%s.base' % backend_name)
  File "/usr/lib64/python3.6/importlib/__init__.py", line 126, in import_module
    return _bootstrap._gcd_import(name[level:], package, level)
  File "/usr/local/lib64/python3.6/site-packages/django/db/backends/mysql/base.py", line 20, in <module>
    ) from err
django.core.exceptions.ImproperlyConfigured: Error loading MySQLdb module.
Did you install mysqlclient?

错误解读

这个错误信息表明你的Django项目尝试使用MySQL作为数据库后端,但是无法加载MySQLdb模块。MySQLdb是Python的一个MySQL数据库接口,但它通常不是Django官方推荐的方式来连接MySQL数据库。Django官方推荐使用mysqlclient库作为MySQL的数据库后端。

错误信息中明确提到了:“Did you install mysqlclient?” 这意味着Django在尝试使用MySQL数据库时,找不到mysqlclient库。

要解决这个问题,你需要安装mysqlclient库。但是,由于你正在使用Python 3.6,并且可能是在一个较旧的CentOS版本上,直接安装mysqlclient可能会遇到一些依赖问题。mysqlclient是Python的MySQL数据库连接器的一个C扩展,因此它需要在你的系统上编译。

以下是安装mysqlclient的步骤:

安装MySQL开发库:
你需要先在你的CentOS系统上安装MySQL的开发库。这可以通过yum(或dnf,取决于你的CentOS版本)来完成:
bash
sudo yum install mysql-devel
或者,如果你的系统是CentOS 8或更高版本,使用dnf:

bash
sudo dnf install mysql-devel
安装Python开发工具和库:
确保你的系统上安装了Python的开发工具和标准库。这通常包括python3-devel(或python-devel,取决于你的Python版本和安装方式):
bash
sudo yum install python36-devel  # 对于Python 3.6
注意:python36-devel可能不是所有CentOS版本中的标准包名。如果你的系统中没有这个包,你可能需要查找正确的包名,或者通过其他方式安装Python开发环境。

安装mysqlclient:
使用pip(Python的包管理器)来安装mysqlclient。你可能需要使用pip3或pip3.6来确保为Python 3.6安装库:
bash
pip3.6 install mysqlclient
或者,如果你的系统中pip3默认指向Python 3.6,你可以简单地使用:

bash
pip3 install mysqlclient
配置Django:
在你的Django项目的settings.py文件中,确保DATABASES配置正确指向了你的MySQL数据库。这通常包括数据库引擎(设置为'django.db.backends.mysql')、数据库名称、用户、密码、主机和端口等信息。
测试连接:
运行Django的迁移命令或其他数据库操作来测试连接是否成功:
bash
python3.6 manage.py migrate
如果你在安装mysqlclient时遇到任何问题,比如编译错误,这通常是因为缺少必要的系统依赖项。确保你按照上述步骤安装了所有必要的开发库和工具。如果问题仍然存在,你可能需要查找与你的特定CentOS版本和Python版本相关的安装指南或寻求社区帮助。

简单来说就是Django项目是使用MySQL作为数据库的后端了没有错,Django是使用mysqlclient库作为MySQL的数据库后端的,但是这里找不到mysqlclient

yum install mysql-devel
yum install python36-devel

pip3 install mysqlclient
在执行完成这些东西之后又遇到了错误问题(。。。)

错误解读3

WARNING: Running pip install with root privileges is generally not a good idea. Try `pip3 install --user` instead.
Collecting mysqlclient
  Downloading http://mirrors.cloud.aliyuncs.com/pypi/packages/50/5f/eac919b88b9df39bbe4a855f136d58f80d191cfea34a3dcf96bf5d8ace0a/mysqlclient-2.1.1.tar.gz (88kB)
    100% |████████████████████████████████| 92kB 58.3MB/s 
    Complete output from command python setup.py egg_info:
    /bin/sh: mysql_config: command not found
    /bin/sh: mariadb_config: command not found
    /bin/sh: mysql_config: command not found
    mysql_config --version
    mariadb_config --version
    mysql_config --libs
    Traceback (most recent call last):
      File "<string>", line 1, in <module>
      File "/tmp/pip-build-r9c67tsf/mysqlclient/setup.py", line 15, in <module>
        metadata, options = get_config()
      File "/tmp/pip-build-r9c67tsf/mysqlclient/setup_posix.py", line 70, in get_config
        libs = mysql_config("libs")
      File "/tmp/pip-build-r9c67tsf/mysqlclient/setup_posix.py", line 31, in mysql_config
        raise OSError("{} not found".format(_mysql_config_path))
    OSError: mysql_config not found
    
    ----------------------------------------
Command "python setup.py egg_info" failed with error code 1 in /tmp/pip-build-r9c67tsf/mysqlclient/

这个时候又问了一下质朴轻言

这个错误信息表明,在尝试安装 mysqlclient 这个 Python 包时遇到了问题。以下是对错误信息的详细解释:

WARNING: 这是一条警告信息,提醒你使用 root 权限运行 pip install 通常不是一个好主意。建议使用 pip3 install --user 命令,这样可以避免对系统级的 Python 环境造成影响。
Collecting mysqlclient: 这表示 pip 正在尝试下载并安装 mysqlclient 包。
Downloading: 这一行显示了 mysqlclient 包的下载地址和下载进度。
Complete output from command: 以下是尝试安装 mysqlclient 时命令行输出的完整内容。
/bin/sh: mysql_config: command not found: 这条错误信息表明,系统找不到 mysql_config 这个命令。mysql_config 是一个用于获取 MySQL 库和包含文件信息的程序,mysqlclient 包在安装时需要它。
Traceback (most recent call last)…: 这部分是 Python 的错误回溯,它显示了导致安装失败的具体错误。
OSError: mysql_config not found: 这条错误信息是最终的错误,它说明 mysql_config 没有被找到,因此 mysqlclient 的安装脚本无法继续。
为了解决这个问题,你可以尝试以下步骤:

安装 MySQL 开发包:通常,你需要安装 MySQL 或 MariaDB 的开发包,这些包包含了 mysql_config 命令。在基于 Debian 的系统(如 Ubuntu)上,你可以使用以下命令安装:
sudo apt-get install libmysqlclient-dev
在基于 Red Hat 的系统(如 CentOS)上,你可以使用:
sudo yum install mysql-devel
使用 --user 选项安装:按照警告信息,使用以下命令来避免使用 root 权限:
pip3 install --user mysqlclient
确保你的环境中安装了 Python 和 pip:确保你的环境中安装了正确的 Python 版本和对应的 pip 工具。
按照这些步骤操作后,你应该能够成功安装 mysqlclient 包。

简单来说就是mysql_config找不到

find / -name mysql_config

什么都没有找到,然后我就回去看了下安装mysql_config的过程

错误解读4

root@iZ2vcgp9bi0jd04hxuh0jxZ guitar_chords]# yum install mysql-devel
Loaded plugins: fastestmirror
Loading mirror speeds from cached hostfile
Resolving Dependencies
--> Running transaction check
---> Package mysql-community-devel.x86_64 0:8.0.39-1.el7 will be installed
--> Finished Dependency Resolution

Dependencies Resolved

============================================================================================================================================================================================
 Package                                             Arch                                 Version                                     Repository                                       Size
============================================================================================================================================================================================
Installing:
 mysql-community-devel                               x86_64                               8.0.39-1.el7                                mysql80-community                               1.9 M

Transaction Summary
============================================================================================================================================================================================
Install  1 Package

Total size: 1.9 M
Installed size: 9.9 M
Is this ok [y/d/N]: Y
Downloading packages:
warning: /var/cache/yum/x86_64/7/mysql80-community/packages/mysql-community-devel-8.0.39-1.el7.x86_64.rpm: Header V4 RSA/SHA256 Signature, key ID a8d3785c: NOKEY
Retrieving key from file:///etc/pki/rpm-gpg/RPM-GPG-KEY-mysql


The GPG keys listed for the "MySQL 8.0 Community Server" repository are already installed but they are not correct for this package.
Check that the correct key URLs are configured for this repository.


 Failing package is: mysql-community-devel-8.0.39-1.el7.x86_64
 GPG Keys are configured as: file:///etc/pki/rpm-gpg/RPM-GPG-KEY-mysql
这个表示安装成功了吗?

ai的回答是

从你提供的输出信息来看,安装过程并没有成功完成。错误信息指出 GPG 密钥与 “MySQL 8.0 Community Server” 软件库中的包不匹配。这通常意味着软件库的 GPG 密钥可能已经更改,或者你的系统上的密钥不正确。

以下是解决此问题的步骤:
导入正确的 GPG 密钥:首先,你需要确保你有正确的 GPG 密钥。你可以从 MySQL 的官方网站下载它。
sudo rpm --import https://repo.mysql.com/RPM-GPG-KEY-mysql-2022
重新配置软件库:导入密钥后,你可以尝试重新配置 MySQL 的 Yum 仓库。
sudo yum clean all
sudo yum makecache
再次尝试安装:完成上述步骤后,再次尝试安装 mysql-community-devel。
sudo yum install mysql-community-devel
如果这些步骤解决了 GPG 密钥问题,安装应该会成功完成。如果问题仍然存在,确保你的系统上安装的 MySQL Yum 仓库配置是正确的。

在安装成功后,你可以通过以下命令来验证 mysql_config 是否存在于 /usr/bin 目录:

ll /usr/bin | grep mysql_config
如果安装成功,你应该会看到 mysql_config 的条目。如果没有,可能需要进一步调查为什么 mysql_config 没有被安装到预期的位置。

简单来说就是密钥的问题

然后我也按照ai给的去做了还是有这个问题

最后

最终解决办法

 yum install mysql-devel --nogpgcheck
禁掉GPG验证检查

禁掉GPG验证检查

禁掉GPG验证检查

禁掉GPG验证检查

禁掉GPG验证检查

禁掉GPG验证检查

-------------------------------------------------------------------------2024/10/6   21:48  

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值