Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/346.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Django项目设置的相对导入导致移动的manage.py文件出错_Python_Django - Fatal编程技术网

Python Django项目设置的相对导入导致移动的manage.py文件出错

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

下面是答案中的目录结构:

在此处查看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")
我认为这基本上是等价的

无论如何,这是我在运行
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%实现。My
settings.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")