使用 python-social-auth 的 django makemigrations 导致权限被拒绝错误
django makemigrations with python-social-auth leads to permission denied error
在我安装的应用中添加 python 社交身份验证后,即
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 目录的权限。但是,这是唯一的方法吗,还是我遗漏了什么?
如您的问题所述,更改目录权限是一种解决方案。然而,另一种方法是使用 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 项目中使用之前创建一个迁移,该迁移将 related_name 添加到外键 'user' 中'UserSocialAuth' 模型
使用上面接受的解决方案,您可以有效地将项目文件放入 python 环境中。每次部署到新服务器时,您都必须 运行 makemigrations 来创建这些文件。
如何告诉 makemigrations 将社会迁移放入您自己的项目中?
MIGRATION_MODULES = {
# social.apps.django_app.default
'default': 'myproject.mysocial.migrations',
}
这样,当您部署到您的服务器时,您的项目是独立的,并且无需破解您的 Python 环境即可工作。
据我所知,这些答案中的 None 解决了您的问题。简单地安装一个新的应用程序不需要创建新的迁移文件;他们应该,人们会期望,与应用程序包一起运送。
这看起来像是程序包作者的错误或疏忽。
在我安装的应用中添加 python 社交身份验证后,即
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 目录的权限。但是,这是唯一的方法吗,还是我遗漏了什么?
如您的问题所述,更改目录权限是一种解决方案。然而,另一种方法是使用 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 项目中使用之前创建一个迁移,该迁移将 related_name 添加到外键 'user' 中'UserSocialAuth' 模型
使用上面接受的解决方案,您可以有效地将项目文件放入 python 环境中。每次部署到新服务器时,您都必须 运行 makemigrations 来创建这些文件。
如何告诉 makemigrations 将社会迁移放入您自己的项目中?
MIGRATION_MODULES = {
# social.apps.django_app.default
'default': 'myproject.mysocial.migrations',
}
这样,当您部署到您的服务器时,您的项目是独立的,并且无需破解您的 Python 环境即可工作。
None 解决了您的问题。简单地安装一个新的应用程序不需要创建新的迁移文件;他们应该,人们会期望,与应用程序包一起运送。
这看起来像是程序包作者的错误或疏忽。