manage.py syncdb 正在使用虚拟环境中另一个项目的数据库



我有两个站点,在同一个虚拟环境中,在两个不同的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?

您的问题是您的PYTHONPATHproj2之前列出了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

最新更新