与python-social-auth的django makemigrations导致权限被拒绝错误

mja*_*ews 6 django python-social-auth django-migrations

将python social auth添加到我安装的应用程序后,即

INSTALLED_APPS = (
    ...
    'social.apps.django_app.default',
    ...
)
Run Code Online (Sandbox Code Playgroud)

然后尝试一个

python manage.py makemigrations
Run Code Online (Sandbox Code Playgroud)

我得到一个不足为奇的权限错误

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'
Run Code Online (Sandbox Code Playgroud)

有意义的是我无法写入系统范围的软件包安装目录.

有一些明显的方法,比如更改站点包/社交目录的权限.但是,这是这样做的唯一方法,还是我错过了什么?

ela*_*las 0

正如您的问题所述,更改目录的权限将是一个解决方案。然而,另一种方法是使用virtualenv为 Django 项目创建一个隔离的 Python 环境。或者,更方便的是,扩展virtualenvwrapper

像这样安装后面的:

$ pip install virtualenvwrapper
Run Code Online (Sandbox Code Playgroud)

以下命令为您的项目创建激活 virtualenv:

$ mkvirtualenv django_project
$ workon django_project
Run Code Online (Sandbox Code Playgroud)

之后,您可以自由安装 Django 和 Python Social Auth

$ pip install django
$ pip install python-social-auth
Run Code Online (Sandbox Code Playgroud)

您会注意到所有这些都将安装在$HOME/.virtualenvs/django_project

这是 Python 和 Django 用户中常见的推荐做法。它将解决权限问题,以及在您的所有项目中使用系统的 Python 安装时可能遇到的其他依赖性问题。

请注意,Python Social Auth 实际上需要在 Django 项目中使用之前创建迁移,该迁移将 related_name 添加到“UserSocialAuth”模型中的外键“user”中