2016-06-07 15 views
-3

Ich habe den folgenden Code in meinem Django appDjango Python nicht 3 Installation

def get_filename(root): 
    def wrapper(instance, filename): 
     return (root + filename) 

    return wrapper 

... 

docfile = models.FileField(upload_to=get_filename("/some_dir")) 

Lauf dies mit python3 manage.py makemigrations myapp Ergebnisse in der folgenden Fehler

Traceback (most recent call last): 
    File "manage.py", line 10, in <module> 
    execute_from_command_line(sys.argv) 
    File "/usr/local/lib/python3.4/dist-packages/django/core/management/__init__.py", line 353, in execute_from_command_line 
    utility.execute() 
    File "/usr/local/lib/python3.4/dist-packages/django/core/management/__init__.py", line 345, in execute 
    self.fetch_command(subcommand).run_from_argv(self.argv) 
    File "/usr/local/lib/python3.4/dist-packages/django/core/management/base.py", line 348, in run_from_argv 
    self.execute(*args, **cmd_options) 
    File "/usr/local/lib/python3.4/dist-packages/django/core/management/base.py", line 399, in execute 
    output = self.handle(*args, **options) 
    File "/usr/local/lib/python3.4/dist-packages/django/core/management/commands/makemigrations.py", line 150, in handle 
    self.write_migration_files(changes) 
    File "/usr/local/lib/python3.4/dist-packages/django/core/management/commands/makemigrations.py", line 178, in write_migration_files 
    migration_string = writer.as_string() 
    File "/usr/local/lib/python3.4/dist-packages/django/db/migrations/writer.py", line 167, in as_string 
    operation_string, operation_imports = OperationWriter(operation).serialize() 
    File "/usr/local/lib/python3.4/dist-packages/django/db/migrations/writer.py", line 124, in serialize 
    _write(arg_name, arg_value) 
    File "/usr/local/lib/python3.4/dist-packages/django/db/migrations/writer.py", line 76, in _write 
    arg_string, arg_imports = MigrationWriter.serialize(item) 
    File "/usr/local/lib/python3.4/dist-packages/django/db/migrations/writer.py", line 357, in serialize 
    item_string, item_imports = cls.serialize(item) 
    File "/usr/local/lib/python3.4/dist-packages/django/db/migrations/writer.py", line 433, in serialize 
    return cls.serialize_deconstructed(path, args, kwargs) 
    File "/usr/local/lib/python3.4/dist-packages/django/db/migrations/writer.py", line 318, in serialize_deconstructed 
    arg_string, arg_imports = cls.serialize(arg) 
    File "/usr/local/lib/python3.4/dist-packages/django/db/migrations/writer.py", line 507, in serialize 
    % (value.__name__, module_name, get_docs_version())) 
ValueError: Could not find function wrapper in myapp.models. 
Please note that due to Python 2 limitations, you cannot serialize unbound method functions (e.g. a method declared and used in the same class body). Please move the function into the main module body to use migrations. 
For more information, see https://docs.djangoproject.com/en/1.9/topics/migrations/#serializing-values 

Ich bin mit Python 3.4.3, benutzt Django meine Python 2-Installation?

Antwort

3

Django verwendet die Standardinstallation von Python auf Ihrem System. Das ist wahrscheinlich 2,7

sein, wenn Sie eine bestimmte Python-Version verwenden möchten, können Sie Django diese Version explizit

~$ python3 django-admin runserver --settings=myapp.settings 

Aber was Sie wirklich tun sollten, ist virtualenv zu installieren beginnen könnte und eine virtuelle Umgebung erstellen zu Django in.

Es ermöglicht Ihnen, die Python-Version anzugeben, mit der Sie arbeiten möchten, verwenden Sie verschiedene Versionen von Django und verschiedene Versionen von Modulen für verschiedene Projekte. Alles ohne Ihr System mit tausenden vertauschten Versionen aller möglichen Module zu überladen.

+0

Ich benutze 'python3' ausführen, um die app (aktualisierte Frage mit dem Befehl, den ich benutze) –

+0

Was sagt 'python3 --version'? – C14L

+0

Es sagt 'Python 3.4.3' –

0

Sie sind besser dran, ein Python-3.4 virtualenv einzurichten und Ihr Django-Projekt aus der virtuellen Umgebung auszuführen.

Suche Installationsanleitung here und weitere Informationen here

0

ändern Sie den Befehl, den Sie für python3 verwenden. für exemple, um django-Server zu starten: python3 manage.py runserver 0.0.0.0:8000 statt Python manage.py runserver 0.0.0.0:8000

+0

Das ist, was ich tue (fügte den Befehl hinzu, den ich in der Frage verwende) –