我正在尝试运行一个继承的Django项目。我已经设置了virtualenv并试图通过pip install -r requirements.txt
传递需求文件。一切似乎都有效。它告诉我它正在使用正确的virtualenv,并且包似乎安装,例如:
Downloading/unpacking django-mediasync==2.2.0 (from -r requirements.txt (line 22))
Downloading django-mediasync-2.2.0.tar.gz
Running setup.py egg_info for package django-mediasync
但是当我尝试syncdb或runserver时,
Unhandled exception in thread started by <bound method Command.inner_run of <django.contrib.staticfiles.management.commands.runserver.Command object at 0x10f15e290>>
Traceback (most recent call last):
File "/Users/me/.virtualenvs/example/lib/python2.7/site-packages/django/core/management/commands/runserver.py", line 88, in inner_run
self.validate(display_num_errors=True)
File "/Users/me/.virtualenvs/example/lib/python2.7/site-packages/django/core/management/base.py", line 249, in validate
num_errors = get_validation_errors(s, app)
File "/Users/me/.virtualenvs/example/lib/python2.7/site-packages/django/core/management/validation.py", line 36, in get_validation_errors
for (app_name, error) in get_app_errors().items():
File "/Users/me/.virtualenvs/example/lib/python2.7/site-packages/django/db/models/loading.py", line 146, in get_app_errors
self._populate()
File "/Users/me/.virtualenvs/example/lib/python2.7/site-packages/django/db/models/loading.py", line 61, in _populate
self.load_app(app_name, True)
File "/Users/me/.virtualenvs/example/lib/python2.7/site-packages/django/db/models/loading.py", line 76, in load_app
app_module = import_module(app_name)
File "/Users/me/.virtualenvs/example/lib/python2.7/site-packages/django/utils/importlib.py", line 35, in import_module
__import__(name)
ImportError: No module named mediasync
我手动安装mediasync
(或任何其他必要的包)(pip install django-mediasync
)有点奇怪,现在可以找到包。
我做错了什么?我不想手动安装所有这些软件包。
答案 0 :(得分:3)
我认为在执行时:pip install -r requirements.txt
出现了一些错误,但您没有注意到。基本上整个操作将在出现错误时停止。
例如,您的requirements.txt
有4个这样的包:
A
B
C
D
如果安装B
时出错,则不会安装3个包B
,C
和D
。在我看来,在requirements.txt
中安装一个软件包时出错,并且根本没有安装django-mediasync
。
如果我的假设是正确的,请执行pip install -r requirements.txt
并检查追溯的最后部分。如果出现问题,您将确切知道原因。
答案 1 :(得分:1)
你在做sudo pip install django-mediasync
还是sudo pip install -r requirements.txt
?如果是这样,它将安装在virtualenv之外。请参阅How to install which programs requires "sudo" in virtualenv?。
基本上因为您的用户应该拥有virtualenv目录,所以您不需要超级用户权限即可通过pip安装任何内容。 which pip
和sudo which pip
,您会发现它们不同。
另一种可能是您的requirements.txt没有正确安装。它可能会输出你提到的行,但显然pip会在安装任何内容之前扫描requirements.txt中的所有包。如果有任何错误,它将中止所有包的安装。