3

我正在尝试运行一个继承的 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

但是当我尝试同步数据库或运行服务器时,

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),现在可以找到该包。

我究竟做错了什么?我不想手动安装所有这些软件包。

4

2 回答 2

3

我想在做的时候:pip install -r requirements.txt有一些错误,但你没有注意到。基本上整个操作会在出现错误时停止。

因此,例如,您requirements.txt有 4 个这样的包:

A
B
C
D

如果安装时出现错误B,3个包BC并且D不会安装。在我看来,在您的安装一个软件包时出现错误,requirements.txt并且根本没有安装django-mediasync

如果我的假设是正确的,请pip install -r requirements.txt检查回溯的最后一部分。如果某事失败了,你就会知道确切的原因。

于 2013-07-23T14:27:16.467 回答
1

你在做sudo pip install django-mediasync还是sudo pip install -r requirements.txt?如果是这样,它将把它安装在 virtualenv 之外。请参阅如何在 virtualenv 中安装哪些程序需要“sudo”?.

基本上因为你的用户应该拥有 virtualenv 目录,你不需要超级用户权限来通过 pip 安装任何东西。做which pipsudo which pip你会发现它们是不同的。

另一种可能是您的 requirements.txt 没有正确安装。它可能会像您提到的那样输出行,但显然 pip 会在安装任何东西之前扫描 requirements.txt 中的所有包。如果有任何错误,它将中止所有软件包的安装。

于 2013-07-23T02:49:31.777 回答