manage.py - 导入错误:没有名为django的模块
我刚把一个在Windows系统上运行的django应用程序迁移到了Ubuntu,只是简单地把所有文件复制到了 /var/www/some/dir/djangoApp
。但是现在,当我执行
python manage.py runserver 8080
时,出现了错误:
ImportError: no module named django
我已经用 python setup.py install
安装了一个新的django版本,安装路径是 /usr/local/lib/python2.7/dist-packages/django/
,并且把这个路径添加到了PYTHONPATH中。
这个Linux系统不是我维护的,里面安装了很多不同版本的Python。
在命令行中输入 >>> import django
并没有出现导入错误。
我感到很困惑。请帮帮我!
这是控制台的错误追踪信息:
Traceback (most recent call last):
File "manage.py", line 13, in <module>
execute_from_command_line(sys.argv)
File "/usr/local/lib/python2.7/dist-packages/django/core/management/__init__.py", line 399, in execute_from_command_line
utility.execute()
File "/usr/local/lib/python2.7/dist-packages/django/core/management/__init__.py", line 392, in execute
self.fetch_command(subcommand).run_from_argv(self.argv)
File "/usr/local/lib/python2.7/dist-packages/django/core/management/base.py", line 242, in run_from_argv
self.execute(*args, **options.__dict__)
File "/usr/local/lib/python2.7/dist-packages/django/core/management/base.py", line 280, in execute
translation.activate('en-us')
File "/usr/local/lib/python2.7/dist-packages/django/utils/translation/__init__.py", line 130, in activate
return _trans.activate(language)
File "/usr/local/lib/python2.7/dist-packages/django/utils/translation/trans_real.py", line 188, in activate
_active.value = translation(language)
File "/usr/local/lib/python2.7/dist-packages/django/utils/translation/trans_real.py", line 177, in translation
default_translation = _fetch(settings.LANGUAGE_CODE)
File "/usr/local/lib/python2.7/dist-packages/django/utils/translation/trans_real.py", line 159, in _fetch
app = import_module(appname)
File "/usr/local/lib/python2.7/dist-packages/django/utils/importlib.py", line 40, in import_module
__import__(name)
ImportError: No module named django
4 个回答
看起来这个问题的解决方法可能挺复杂,但实际上问题可能很简单。
我也遇到过同样的问题,前一天还好好的,第二天就不行了。我对Linux和Django还很陌生,但对Python比较熟悉,所以除了“虚拟环境”之外,不知道该去哪里找答案。
我开始重新安装虚拟环境(像有些人建议的那样),但其实不要这样做!
至少在你试过这个方法之前,不要急着安装:
你有没有把虚拟环境安装成临时的?(你是不是这样安装的:“pip install pipenv”?)
如果你是这样做的(其实应该这样做),那么在你当前的Django项目文件夹里会有两个文件 - pipfile 和 pipfile.lock。
打开你的终端,进入这两个文件所在的文件夹(同一个文件夹)。
在终端里输入:pipenv shell
哇!你刚刚重新激活了你的“临时”虚拟环境,Django就会像之前那样正常工作。
我在遇到同样的错误后找到了这个页面(我在一个已经开发了几个月的网站上,之前一切都很好)。对我来说,@asaji的回答让我想起我忘记启动我的虚拟环境了。
启动我的虚拟环境后,使用命令. Scripts/activate
,一切都正常了!
有时候在文件夹里会出现一些 .pyc 文件,但你在控制台上不会看到任何错误。这是在用 pip 安装 Django 的时候遇到的情况。
sudo pip install django
最佳做法是创建一个 requirements.txt 文件(从你的 Windows 安装中获取)
pip freeze > requirements.txt
然后创建一个新的虚拟环境来安装每一个包
mkvirtualenv myapp
pip install -r requirements.txt
既然你刚刚迁移到UNIX环境,我建议你也要遵循这个平台上的最佳实践。
首先,下载PIP,这是一个用来管理Python包的工具。
sudo apt-get install python-pip
接下来,下载并安装virtualenv,这样可以为你的应用设置一个独立的Python虚拟环境。这样你就可以在不冲突的情况下运行不同版本的Django和其他软件。
sudo pip install virtualenv
然后,创建一个虚拟环境。执行这个命令后,你会得到一个名为myvirtualenvironment的文件夹,里面有一个bin文件夹和一些可执行文件。
virtualenv myvirtualenvironment --no-site-packages
为了让你的命令行知道你正在使用这个新创建的虚拟环境,你需要运行位于
/myvirtualenvironment/bin/
的激活脚本。source myvirtualenvironment/bin/activate
现在,你可以在这个虚拟环境中专门安装Django了。
pip install django
或者pip install django==1.6
,具体取决于你想安装哪个版本。如果不指定,默认会安装最新版本。最后,把你的Django项目迁移到
/myvirtualenvironment/
里面,然后运行runserver命令。