运行Django项目manage.py报错ValueError:源码字符串含空字节求助
Django运行manage.py报错:ValueError: source code string cannot contain null bytes 排查
运行manage.py时始终触发以下错误:
main() File "/storage/emulated/0/django/twitter/manage.py", line 21, in main execute_from_command_line(sys.argv) File "/data/data/com.termux/files/home/my_venv/lib/python3.10/site-packages/django/core/management/__init__.py", line 425, in execute_from_command_line utility.execute() File "/data/data/com.termux/files/home/my_venv/lib/python3.10/site-packages/django/core/management/__init__.py", line 369, in execute settings.INSTALLED_APPS File "/data/data/com.termux/files/home/my_venv/lib/python3.10/site-packages/django/conf/__init__.py", line 84, in __getattr__ self._setup(name) File "/data/data/com.termux/files/home/my_venv/lib/python3.10/site-packages/django/conf/__init__.py", line 71, in _setup self._wrapped = Settings(settings_module) File "/data/data/com.termux/files/home/my_venv/lib/python3.10/site-packages/django/conf/__init__.py", line 179, in __init__ mod = importlib.import_module(self.SETTINGS_MODULE) File "/data/data/com.termux/files/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 879, in exec_module File "<frozen importlib._bootstrap_external>", line 1017, in get_code File "<frozen importlib._bootstrap_external>", line 947, in source_to_code File "<frozen importlib._bootstrap>", line 241, in _call_with_frames_removed ValueError: source code string cannot contain null bytes
同一虚拟环境下其他Django项目运行正常,仅当前项目出问题,已尝试多种网上方案无效,现提供项目的settings.py和manage.py内容:
原settings.py内容
""" Django settings for fatwa project. Generated by 'django-admin startproject' using Django 4.0.2. For more information on this file, see https://docs.djangoproject.com/en/4.0/topics/settings/ For the full list of settings and their values, see https://docs.djangoproject.com/en/4.0/ref/settings/ """ from pathlib import Path from decouple import config # Build paths inside the project like this: BASE_DIR / 'subdir'. BASE_DIR = Path(__file__).resolve().parent.parent # Quick-start development settings - unsuitable for production # See https://docs.djangoproject.com/en/4.0/howto/deployment/checklist/ # SECURITY WARNING: keep the secret key used in production secret! # SECURITY WARNING: don't run with debug turned on in production! DEBUG = True #ALLOWED_HOSTS = [] ALLOWED_HOSTS = ['','192.168.43.1'] #SECRET_KEY=config('my_key') SECRET_KEY = 'django-insecure-!ty9w7k)$02e48otuxekbx8j2805o-5wni(%ety5lycf$&qa-m' # Application definition INSTALLED_APPS = [ 'django.contrib.admin', 'django.contrib.auth', 'django.contrib.contenttypes', 'django.contrib.sessions', 'django.contrib.messages', 'django.contrib.staticfiles', 'django.contrib.sites', 'allauth', 'allauth.account', 'allauth.socialaccount', 'forum', 'ask', 'crispy_forms', 'fontawesome_5', 'hitcount', 'notifications', ] #DJANGO_NOTIFICATIONS_CONFIG = { 'USE_JSONFIELD': True} CRISPY_TEMPLATE_PACK= 'bootstrap4' SITE_ID=1 MIDDLEWARE = [ 'django.middleware.security.SecurityMiddleware', 'django.contrib.sessions.middleware.SessionMiddleware', 'django.middleware.common.CommonMiddleware', 'django.middleware.csrf.CsrfViewMiddleware', 'django.contrib.auth.middleware.AuthenticationMiddleware', 'django.contrib.messages.middleware.MessageMiddleware', 'django.middleware.clickjacking.XFrameOptionsMiddleware', ] ROOT_URLCONF = 'fatwa.urls' TEMPLATES = [ { 'BACKEND': 'django.template.backends.django.DjangoTemplates', 'DIRS': [str(BASE_DIR.joinpath('template'), )], 'APP_DIRS': True, 'OPTIONS': { 'context_processors': [ 'django.template.context_processors.debug', 'django.template.context_processors.request', 'django.contrib.auth.context_processors.auth', 'django.contrib.messages.context_processors.messages', ], }, }, ] WSGI_APPLICATION = 'fatwa.wsgi.application' # Database # https://docs.djangoproject.com/en/4.0/ref/settings/#databases DATABASES = { 'default': { 'ENGINE': 'django.db.backends.sqlite3', 'NAME': BASE_DIR / 'db.sqlite3', } } # Password validation # https://docs.djangoproject.com/en/4.0/ref/settings/#auth-password-validators AUTH_PASSWORD_VALIDATORS = [ { 'NAME': 'django.contrib.auth.password_validation.UserAttributeSimilarityValidator', }, { 'NAME': 'django.contrib.auth.password_validation.MinimumLengthValidator', }, { 'NAME': 'django.contrib.auth.password_validation.CommonPasswordValidator', }, { 'NAME': 'django.contrib.auth.password_validation.NumericPasswordValidator', }, ] # Internationalization # https://docs.djangoproject.com/en/4.0/topics/i18n/ LANGUAGE_CODE = 'en-us' TIME_ZONE = 'UTC' USE_I18N = True USE_TZ = True # Static files (CSS, JavaScript, Images) # https://docs.djangoproject.com/en/4.0/howto/static-files/ STATIC_URL = 'static/' STATICFILES_DIRS=(str(BASE_DIR.joinpath('static')), ) # Default primary key field type # https://docs.djangoproject.com/en/4.0/ref/settings/#default-auto-field DEFAULT_AUTO_FIELD = 'django.db.models.BigAutoField' MEDIA_URL='/media/' MEDIA_ROOT= str(BASE_DIR.joinpath('static')) LOGIN_REDIRECT_URL='/page/home' #LOGOUT_REDIRECt_URL='//' AUTHENTICATION_BACKENDS = [ 'django.contrib.auth.backends.ModelBackend', 'allauth.account.auth_backends.AuthenticationBackend'] # EMAIL_BACKEND so allauth can proceed to send confirmation emails # ONLY for development/testing use console EMAIL_BACKEND='django.core.mail.backends.console.EmailBackend' # Custom allauth settings # Use email as the primary identifier #ACCOUNT_AUTHENTICATION_METHOD = 'email' #ACCOUNT_EMAIL_REQUIRED = True # Make email verification mandatory to avoid junk email accounts #ACCOUNT_EMAIL_VERIFICATION = 'mandatory' # Eliminate need to provide username, as it's a very old practice #ACCOUNT_USERNAME_REQUIRED = True
原manage.py内容
import os import sys def main(): """Run administrative tasks.""" try : os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'twitter.settings') except: raise ImportError('Na the problem be this') try: from django.core.management import execute_from_command_line except ImportError as exc: raise ImportError( "Couldn't import Django. Are you sure it's installed and " "available on your PYTHONPATH environment variable? Did you " "forget to activate a virtual environment?" ) from exc execute_from_command_line(sys.argv) if __name__ == '__main__': main()
排查与解决
1. 核心错误:Settings模块名称不匹配
看manage.py里的配置:
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'twitter.settings')
但settings.py里明确是fatwa项目:
""" Django settings for fatwa project. """
这直接导致Django找不到正确的settings文件,进而触发导入错误。
修正方案:把manage.py里的'twitter.settings'改成'fatwa.settings',修正后的manage.py:
import os import sys def main(): """Run administrative tasks.""" os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'fatwa.settings') try: from django.core.management import execute_from_command_line except ImportError as exc: raise ImportError( "Couldn't import Django. Are you sure it's installed and " "available on your PYTHONPATH environment variable? Did you " "forget to activate a virtual environment?" ) from exc execute_from_command_line(sys.argv) if __name__ == '__main__': main()
2. 检查文件是否含空字节
如果修正后仍报错,说明settings.py或其他导入的文件可能存在隐藏的空字节(文件损坏、复制粘贴时引入)。可以用以下命令检查:
grep -P '\x00' path/to/your/settings.py
如果输出内容,说明文件有问题,重新创建一个干净的settings.py,把原内容复制过去(注意不要复制特殊隐藏字符)。
3. 确认目录结构
确保项目目录结构正确:
fatwa/ ├── fatwa/ │ ├── __init__.py │ ├── settings.py │ ├── urls.py │ └── wsgi.py ├── manage.py └── ...其他应用和文件
manage.py必须和包含settings.py的fatwa子目录在同一层级。
内容的提问来源于stack exchange,提问作者Aourl
相关产品推荐
相关产品推荐

