Django 1.8 выдает ошибку «модуль X не имеет атрибута« запустить »» после обновления до Python 3.5 - PullRequest
2 голосов
/ 23 мая 2019

У меня есть проект Django, работающий под Django 1.8.4, который я пытаюсь обновить до последней версии Django.Поскольку я все еще использовал Python 2.7 на сервере Debian 8, я сначала обновил свой сервер до Debian 9, а затем обновил виртуальную среду своего проекта Django до Python 3.5.3 (версия Python 3 по умолчанию для Debian 9).

После того, как я перестроил виртуальную среду для использования Python 3, я запустил команду 2to3 -w . в корневой папке моего проекта.2to3 нашел и исправил 62 проблемы без каких-либо затруднений.У меня также есть 216 модульных тестов, и только два из них не прошли под Python 3.5.

Затем я зашел на мой сайт Django, и сайт, похоже, работает, за исключением того, что формы, содержащие раскрывающиеся элементы, показывают «SomeThingobject» вместо значений из таблицы SomeThing.Я выполнил несколько SQL-запросов непосредственно к базе данных и подтвердил, что моя таблица поиска SomeThing заполнена.

Теперь я хочу запустить команду набора запросов Django в оболочке Python, как показано ниже, чтобы понять, почему мои раскрывающиеся списки не отображаютсязначения моего столбца:

    queryset=SomeThing.objects.all()

Однако, если я активирую свою виртуальную среду и пытаюсь выполнить команду ./manage.py shell, я получаю следующую ошибку:

Traceback (most recent call last):
  File "./manage.py", line 10, in <module>
    execute_from_command_line(sys.argv)
  File "/srv/https/my_project.com/venvs/0bc664fa2a7b562d0b7e42a7acb3f095fe5df3cf/lib/python3.5/site-packages/django/core/management/__init__.py", line 338, in execute_from_command_line
    utility.execute()
  File "/srv/https/my_project.com/venvs/0bc664fa2a7b562d0b7e42a7acb3f095fe5df3cf/lib/python3.5/site-packages/django/core/management/__init__.py", line 330, in execute
    self.fetch_command(subcommand).run_from_argv(self.argv)
  File "/srv/https/my_project.com/venvs/0bc664fa2a7b562d0b7e42a7acb3f095fe5df3cf/lib/python3.5/site-packages/django/core/management/base.py", line 393, in run_from_argv
    self.execute(*args, **cmd_options)
  File "/srv/https/my_project.com/venvs/0bc664fa2a7b562d0b7e42a7acb3f095fe5df3cf/lib/python3.5/site-packages/django/core/management/base.py", line 444, in execute
    output = self.handle(*args, **options)
  File "/srv/https/my_project.com/venvs/0bc664fa2a7b562d0b7e42a7acb3f095fe5df3cf/lib/python3.5/site-packages/django/core/management/commands/shell.py", line 69, in handle
    self.run_shell(shell=options['interface'])
  File "/srv/https/my_project.com/venvs/0bc664fa2a7b562d0b7e42a7acb3f095fe5df3cf/lib/python3.5/site-packages/django/core/management/commands/shell.py", line 58, in run_shell
    return getattr(self, shell)()
  File "/srv/https/my_project.com/venvs/0bc664fa2a7b562d0b7e42a7acb3f095fe5df3cf/lib/python3.5/site-packages/django/core/management/commands/shell.py", line 41, in ipython
    ip()
  File "/srv/https/my_project.com/venvs/0bc664fa2a7b562d0b7e42a7acb3f095fe5df3cf/lib/python3.5/site-packages/django/core/management/commands/shell.py", line 34, in _ipython
    from IPython import start_ipython
  File "/srv/https/my_project.com/venvs/0bc664fa2a7b562d0b7e42a7acb3f095fe5df3cf/lib/python3.5/site-packages/IPython/__init__.py", line 48, in <module>
    from .terminal.embed import embed
  File "/srv/https/my_project.com/venvs/0bc664fa2a7b562d0b7e42a7acb3f095fe5df3cf/lib/python3.5/site-packages/IPython/terminal/embed.py", line 19, in <module>
    from IPython.terminal.ipapp import load_default_config
  File "/srv/https/my_project.com/venvs/0bc664fa2a7b562d0b7e42a7acb3f095fe5df3cf/lib/python3.5/site-packages/IPython/terminal/ipapp.py", line 30, in <module>
    from IPython.core.magics import ScriptMagics
  File "/srv/https/my_project.com/venvs/0bc664fa2a7b562d0b7e42a7acb3f095fe5df3cf/lib/python3.5/site-packages/IPython/core/magics/__init__.py", line 22, in <module>
    from .execution import ExecutionMagics
  File "/srv/https/my_project.com/venvs/0bc664fa2a7b562d0b7e42a7acb3f095fe5df3cf/lib/python3.5/site-packages/IPython/core/magics/execution.py", line 21, in <module>
    import cProfile as profile
  File "/usr/lib/python3.5/cProfile.py", line 22, in <module>
    run.__doc__ = _pyprofile.run.__doc__
AttributeError: module 'profile' has no attribute 'run'

Теперь у меня естьприложение под названием «профиль» в моем INSTALLED_APPS.Если я пытаюсь открыть оболочку Python на моем производственном сервере, который все еще использует Python 2.7, оболочка запускается без проблем.Эта проблема только с Python 3.5.Что интересно, мой проект Django 1.8 / Python 2.7 содержит файлы .pyc, но теперь в Python 3 они заменены файлами __pycache__/<filename>.cpython-35.pyc.

Я прочитал документ Django Портирование на Python 3 , но, похоже, это не относится к этой проблеме.Что мне нужно сделать, чтобы этот проект Django работал правильно под Python 3.5?Возможно, в Python 3.5 есть что-то новое, что конфликтует с моим profile приложением, или это что-то еще?

1 Ответ

1 голос
/ 29 мая 2019

После долгих размышлений в коде Python я предположил, что проблема вызвана тем, что одно из моих приложений в проекте Django называлось «профиль», и это противоречило модулю профиля в более новой версии cPython. в Python 3.5. После того, как я изменил название приложения на «userprofile», я смог запустить оболочку без проблем. Эти две статьи помогают мне изменить название приложения:

Stackoverflow: Как изменить имя приложения Django?

Как изменить имя приложения Django

...