Python Django项目设置的相对导入导致移动的manage.py文件出错
下面是答案中的目录结构: 在此处查看GitHub上的代码以进行故障排除: 我将Python Django项目设置的相对导入导致移动的manage.py文件出错,python,django,Python,Django,下面是答案中的目录结构: 在此处查看GitHub上的代码以进行故障排除: 我将manage.py移动到scripts目录中。我修改了manage.py和wsgi.py,使其具有以下行: os.environ.setdefault("DJANGO_SETTINGS_MODULE", "{{ project_name }}.settings") 而不是默认设置: os.environ.setdefault("DJANGO_SETTINGS_MODULE", "proj_dir.settings
manage.py
移动到scripts
目录中。我修改了manage.py
和wsgi.py
,使其具有以下行:
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "{{ project_name }}.settings")
而不是默认设置:
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "proj_dir.settings")
我认为这基本上是等价的
无论如何,这是我在运行python manage.py runserver
时遇到的错误:
File "C:\Users\ISH~1\DJANGO~1\lib\importlib\__init__.py", line 126, in import_module
return _bootstrap._gcd_import(name[level:], package, level)
File "<frozen importlib._bootstrap>", line 986, in _gcd_import
File "<frozen importlib._bootstrap>", line 969, in _find_and_load
File "<frozen importlib._bootstrap>", line 944, in _find_and_load_unlocked
File "<frozen importlib._bootstrap>", line 222, in _call_with_frames_removed
File "<frozen importlib._bootstrap>", line 986, in _gcd_import
File "<frozen importlib._bootstrap>", line 969, in _find_and_load
File "<frozen importlib._bootstrap>", line 944, in _find_and_load_unlocked
File "<frozen importlib._bootstrap>", line 222, in _call_with_frames_removed
File "<frozen importlib._bootstrap>", line 986, in _gcd_import
File "<frozen importlib._bootstrap>", line 969, in _find_and_load
File "<frozen importlib._bootstrap>", line 956, in _find_and_load_unlocked
ImportError: No module named '{{ project_name }}'
virtualenv
处于活动状态,我从正确的目录运行manage.py
。当它不在/scripts/
中时工作正常
编辑:
我没有提到这一点,但无论是在manage.py中,它都是:
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "proj_dir.settings")
或:
结果总是导入错误:没有名为'xyz'的模块
。用设置
之前的任何内容填写xyz
此外,上面所述表明,我的项目并不像第一个链接中讨论的那样100%实现。Mysettings.py
仍在默认位置。基本上是这样的:
~/projects/django-project
/proj_dir
settings.py
urls.py
wsgi.py
/scripts
manage.py
另外,我尝试了这个方法,因为我认为它可能在脚本中查找proj_dir
,实际上我希望它能上升一个级别来查找proj_dir
os.environ.setdefault("DJANGO_SETTINGS_MODULE", ".proj_dir.settings")
这只会导致以下错误
TypeError: the 'package' argument is required to perform a relative import for '.proj_dir.settings'
就是在那时,我开始胡乱处理import
和from。导入
,因为文档中说错误与此相关。仍然无法解决此问题。“{project_name}}”似乎是占位符-manage.py不是模板,并且您没有使用模板语法在os.environ.setdefault()的字符串中放置变量
您需要使用正确的项目名称/模块名称。在示例repo中,如果您使用的是该repo中指定的开发设置,则正确的项目名称应为“project_name”(无大括号),例如“project_name.settings.development”
您看到的错误清楚地表明了该行为,因为它正在查找名为“{project_name}}”的模块,因为该模块是提供的顶级(用点分隔)python模块名,它不存在。如果您已将manage.py
移动到scripts
目录,您必须显式地将父目录添加到python路径
sys.path.append('..')
设置DJANGO\u SETTINGS\u模块
环境变量的行不应更改。保持原样
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "proj_dir.settings")
谢谢,请看编辑。我意识到我没有很好地解释自己。哈利路亚。。。这就成功了。我知道这很简单。
sys.path.append('..')
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "proj_dir.settings")