2013-07-22 2 views
2

Я пытаюсь запустить унаследованный проект Django. Я настроил virtualenv и попытался передать файл требований через pip install -r requirements.txt. Кажется, все работает. Он говорит мне, что он работает в правильном virtualenv и пакеты появляются установки, например:Пакеты, установленные `pip install -r requirements.txt`, не найдены

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

Вы уверены, что используете 'pip' из того же самого виртуального? Проверьте 'which pip'. – alecxe

+0

Yup. '/ Users/мне/.virtualenvs/пример/бен/pip'. Кроме того, потому что, когда я устанавливаю пакеты, используя «вручную», а не через файл требований.txt, они работают нормально. – AlexQueue

+0

Когда вы запускаете 'pip install django-mediasync', каков результат? –

ответ

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 и проверьте последнюю часть трассировки. Если что-то не удастся, вы точно поймете, почему.

+3

Я считаю, что пакет А также не будет установлен. Мое понимание заключалось в том, что pip отменит всю команду, если один из пакетов не удался. – hgcrpd

+0

Я думаю, что 'pip' использует последовательную операцию, поэтому тогда будет установлен пакет A. Но да, я не уверен в этом, и у меня нет времени, чтобы пройти тест. –

+0

Здесь мы идем, я нашел этот, когда scipy давал мне проблемы: http://stackoverflow.com/a/11015904/439500 – hgcrpd

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, и вы увидите, что они разные.

Другая возможность может заключаться в том, что ваш файл требований.txt не устанавливается правильно. Он может выводить строки, такие как строка, о которой вы упоминаете, но, очевидно, pip проверит все пакеты в файле требований.txt перед установкой чего-либо. Если есть какая-либо ошибка, она прекратит установку для всех пакетов.

+0

Я тоже не делаю sudo. – AlexQueue

+0

Ах. Благодарим вас за разъяснение «всего или ничего» характера «pip install -r»! Очень образованный. – starlocke

+0

На самом деле, мой опыт противоречит теории «всего или ничего».По какой-то причине несколько пакетов удалось установить, а некоторые из них не были установлены. Мне удалось исправить одну строку моего «требования.txt» (добавлена ​​конкретная версия в один из пакетов), которые позволяют pip идти вперед и выполнять множество инсталляций. После того, как пип был сделан, список «pip» показал, что результатом была частичная установка. Загадочный! – starlocke

Смежные вопросы