Выполнение 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.
Насколько я могу судить, ни один из этих ответов не касается вашей проблемы. Простая установка нового приложения не должна требовать создания новых файлов миграции; они должны, как и следовало ожидать, быть отправлены с пакетом приложения.
Это похоже на ошибку или недосмотр со стороны автора пакета.