我有两个站点,在同一个虚拟环境中,在两个不同的apacheVirtualHosts中。
当我运行python manage.py syncdb
时,它显示:
Creating tables ...
Installing custom SQL ...
Installing indexes ...
Installed 0 object(s) from 0 fixture(s)
当我运行python manage.py inspectdb > somefile.txt
时,其他站点的详细信息显示在somefile.txt
中。
因此,即使我位于目录"/var/www/venv/proj2/"中,python manage.py
也在调用文件/var/www/venv/proj1/manage.py
。有什么原因会导致这种情况,或者如何诊断?
manage.py:
#!/usr/bin/env python
import os
import sys
if __name__ == "__main__":
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "proj1.settings")
from django.core.management import execute_from_command_line
execute_from_command_line(sys.argv)
这就是我检查$PYTHONPATH的方式:
# $PYTHONPATH
-bash: /var/www/virtualenv-2.7/proj1:/var/www/virtualenv-2.7/proj2:: No such file or directory
这是.bash_profile
:
# .bash_profile
# Get the aliases and functions
if [ -f ~/.bashrc ]; then
. ~/.bashrc
fi
# User specific environment and startup programs
PATH=$PATH:$HOME/bin
export PATH
PYTHONPATH=/var/www/virtualenv-2.7/proj2:$PYTHONPATH
PYTHONPATH=/var/www/virtualenv-2.7/proj1:$PYTHONPATH
export PYTHONPATH
export DJANGO_SETTINGS_MODULE="proj2.settings" #possibly the issue?
您的问题是您的PYTHONPATH
在proj2
之前列出了proj1
。在这种情况下,python将首先在proj1
中查找manage.py
并执行它,然后跳过当前目录中的manage.py
,即使它存在。
作为快速修复,将当前目录添加到PYTHONPATH
中,如下所示:
PYTHONPATH=/var/www/virtualenv-2.7/proj2
PYTHONPATH=/var/www/virtualenv-2.7/proj1:$PYTHONPATH
PYTHONPATH=.:$PYTHONPATH
export PYTHONPATH
这将首先检查您在当前目录中查找的脚本。
此外,除非您有一个特定的目标,否则您可能会丢失特定于项目的路径,并始终从相关目录启动manage.py
。