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

时间:2015-02-17 21:10:06

标签: django python-social-auth django-migrations

将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 个答案:

答案 0 :(得分:1)

通过上面接受的解决方案,您可以有效地将项目文件放在python环境中。每次部署到新服务器时,都必须运行makemigrations来创建这些文件。

如何告诉makemigrations将社交迁移置于您自己的项目中?

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

这样,当您部署到服务器时,您的项目是自包含的,并且可以在不破坏Python环境的情况下工作。

答案 1 :(得分:0)

如您的问题中所述,更改目录的权限将是一种解决方案。然而,另一种方法是使用 virtualenv 为Django项目创建一个独立的Python环境。或者,更方便的是,扩展 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项目中使用之前创建迁移,迁移会将相关名称添加到“UserSocialAuth”模型中的外键“user”

答案 2 :(得分:0)

据我所知,这些答案都没有解决您的问题。简单地安装新应用程序不应该需要创建新的迁移文件;人们可以预期,他们应该随应用程序包一起发货。

这看起来像包裹作者的错误或疏忽。