Выполнение django с помощью python-social-auth приводит к ошибке отказа в разрешении

После добавления Python Social Auth в мои установленные приложения, т.е.

INSTALLED_APPS = (
    ...
    'social.apps.django_app.default',
    ...
)

а затем пытается

python manage.py makemigrations

Я получаю неудивительную ошибку в разрешениях

Migrations for 'default':
  0002_auto_20150217_2053.py:
    - Alter field user on usersocialauth
Traceback (most recent call last):
  File "manage.py", line 10, in <module>
    execute_from_command_line(sys.argv)
  File "/usr/lib/python2.7/site-packages/django/core/management  /__init__.py", line 385, in execute_from_command_line
utility.execute()
File "/usr/lib/python2.7/site-packages/django/core/management/__init__.py", line 377, in execute
  self.fetch_command(subcommand).run_from_argv(self.argv)
File "/usr/lib/python2.7/site-packages/django/core/management/base.py", line 288, in run_from_argv
  self.execute(*args, **options.__dict__)
File "/usr/lib/python2.7/site-packages/django/core/management/base.py", line 338, in execute
  output = self.handle(*args, **options)
File "/usr/lib/python2.7/site-packages/django/core/management/commands/makemigrations.py", line 124, in handle
  self.write_migration_files(changes)
File "/usr/lib/python2.7/site-packages/django/core/management/commands /makemigrations.py", line 153, in write_migration_files
  with open(writer.path, "wb") as fh:
  IOError: [Errno 13] Permission denied: u'/usr/lib/python2.7/site-packages/social/apps/django_app/default/migrations/0002_auto_20150217_2053.py'

Имеет смысл, что я не могу писать в общесистемные каталоги установки пакетов.

Есть несколько очевидных способов обойти это, например, изменение разрешений в каталогах site-packages / social. Тем не менее, это единственный способ сделать это, или я что-то упустил?

3 ответа

Решение

Как указано в вашем вопросе, изменение разрешений для каталогов будет решением. Еще один способ сделать это - создать изолированную среду Python для вашего проекта Django, используя virtualenv. Или, что более удобно, расширение virtualenvwrapper.

Установите позже, как это:

$ pip install virtualenvwrapper

Следующее создает активирует virtualenv для вашего проекта:

$ mkvirtualenv django_project
$ workon django_project

После этого вы можете свободно устанавливать Django и Python Social Auth.

$ pip install django
$ pip install python-social-auth

Вы заметите, что все это будет установлено в $HOME/.virtualenvs/django_project

Это распространенная, рекомендуемая практика среди пользователей Python и Django. Это решит проблемы с разрешениями, а также другие проблемы с зависимостями, с которыми вы можете столкнуться, если вы используете установку Python вашей системы для всех ваших проектов.

Обратите внимание, что Python Social Auth действительно требует создания миграции перед ее использованием в проекте Django, миграция добавляет related_name к внешнему ключу 'user' в модели 'UserSocialAuth'

Используя принятое выше решение, вы эффективно помещаете файлы проекта в среду Python. И каждый раз, когда вы развертываете на новом сервере, вам нужно запускать makemigrations для создания этих файлов.

Как насчет того, чтобы сказать makemigrations, чтобы поместить социальные миграции в ваш собственный проект?

MIGRATION_MODULES = {
    # social.apps.django_app.default    
    'default': 'myproject.mysocial.migrations',           
}

Таким образом, при развертывании на вашем сервере ваш проект будет автономным и будет работать без взлома вашей среды Python.

Насколько я могу судить, ни один из этих ответов не касается вашей проблемы. Простая установка нового приложения не должна требовать создания новых файлов миграции; они должны, как и следовало ожидать, быть отправлены с пакетом приложения.

Это похоже на ошибку или недосмотр со стороны автора пакета.

Другие вопросы по тегам