2015-02-17 79 views
6

一個使用python-社會權威性的Django makemigrations導致權限被拒絕錯誤

python manage.py makemigrations 

我得到一個令人吃驚的權限將蟒蛇社會AUTH我安裝的應用程序,即

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

,然後嘗試後錯誤

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' 

它是有道理的,我不能寫入系統寬包安裝導演IES。

有一些明顯的解決方法,比如更改site-packages/social目錄的權限。然而,這是做這件事的唯一方式,還是我錯過了什麼?

+0

你爲什麼試圖在系統包中進行應用程序的遷移?如果你想貢獻,你應該把這個包的代碼複製到單獨的django項目中並在那裏進行遷移。 – GwynBleidD 2015-02-17 21:30:37

+0

好點。但我只是按照這裏的建議https://python-social-auth.readthedocs.org/en/latest/configuration/django.html – mjandrews 2015-02-17 21:43:11

+0

我認爲這是Python-social-auth的文檔中的錯誤。軟件包應提供準備使用的遷移。 – GwynBleidD 2015-02-18 09:13:54

回答

0

正如您的問題所述,更改目錄上的權限將是一個解決方案。然而,另一種方法是使用virtualenv爲您的Django項目創建一個獨立的Python環境。或者,更方便地,擴展virtualenvwrapper

安裝這樣以後:

​​

下面創建一個激活您的項目的virtualenv:

$ mkvirtualenv django_project 
$ workon django_project 

之後,你可以自由地安裝Django和Python社會驗證

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

您會注意到,所有這些將安裝在$HOME/.virtualenvs/django_project

這是Python和Django用戶中常用的推薦做法。它將解決權限問題,以及如果在所有項目中使用系統的Python安裝時可能遇到的其他依賴性問題。

需要注意的是Python的社會驗證是否確實需要它的Django項目使用之前遷移的創建,遷移在「UserSocialAuth」模式

+1

很好的建議!我現在已經去建立一個虛擬世界。謝謝。 – mjandrews 2015-02-18 02:25:03

1

隨着增加了related_name外鍵「用戶」上面接受的解決方案,你有效地把項目文件放到你的python環境中。每次部署到新的服務器時,您都必須運行makemigrations來創建這些文件。

如何告訴makemigrations將社交遷移放入自己的項目中?

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

這樣,當你部署到你的服務器時,你的項目是獨立的,並且不會破壞你的Python環境。

+0

好點,但這個解決方案對我來說都不起作用。它仍然與全系統/外部方法遷移文件:( – chefarov 2017-03-02 14:03:42

0

據我所知,這些答案都不能解決您的問題。只需安裝新的應用程序就不需要創建新的遷移文件;人們應該期望它們隨應用程序包一起發貨。

這看起來像包作者的錯誤或疏忽。