ImportError при использовании профиля pycharm - PullRequest
0 голосов
/ 10 февраля 2020

Проблема

Я запускаю приложение flask, которое прекрасно работает, когда я использую «run» или «debug». Тем не менее, я получил ошибку при использовании «профиля», вот сообщение журнала

In folder C:/Users/Myname/PycharmProjects/ProjectName
"C:\Users\Myname\Anaconda3\envs\ProjectName\python.exe" "C:\Program Files\JetBrains\PyCharm 
Professional Edition with Anaconda plugin 2019.2.4\helpers\profiler\run_profiler.py" 127.0.0.1 12055 -m flask run
Starting cProfile profiler
Traceback (most recent call last):
Snapshot saved to C:\Users\Myname/.PyCharm2019.2/system\snapshots\ProjectName1.pstat
File "C:\Program Files\JetBrains\PyCharm Professional Edition with Anaconda plugin 2019.2.4\helpers\profiler\run_profiler.py", line 173, in <module>
profiler.run(file)
File "C:\Program Files\JetBrains\PyCharm Professional Edition with Anaconda plugin 2019.2.4\helpers\profiler\run_profiler.py", line 89, in run
execfile(file, globals, globals)  # execute the script
File "C:\Program Files\JetBrains\PyCharm Professional Edition with Anaconda plugin 2019.2.4\helpers\profiler\prof_util.py", line 30, in execfile
exec(compile(contents+"\n", file, 'exec'), glob, loc)
File "C:\Users\Myname\Anaconda3\envs\ProjectName\lib\site-packages\flask\__init__.py", line 19, in <module>
from . import json
ImportError: attempted relative import with no known parent package

Что я пробовал

Я Google и обнаружил, что это старая проблема.

Невозможно профилировать модуль с использованием относительного импорта

Профиль Pycharm не работает

Как воспроизвести его

Если вы хотите воспроизвести его, вы можете создать приложение flask, используя pycharm, а затем нажать «Профиль».

Код по умолчанию для * Приложение 1041 * работает следующим образом. Но я не думаю, что это имеет значение.

from flask import Flask

app = Flask(__name__)


@app.route('/')
def hello_world():
    return 'Hello World!'


if __name__ == '__main__':
    app.run()

Сообщение об ошибке может отличаться из-за изменения версии flask или версии Pycharm, но причина та же: File "xxx\lib\site-packages\flask\__init__.py", line 19, in <module> использовать относительный импортировать и вызывать ImportError

Мой вопрос

Мой вопрос: есть ли способ заставить его работать? Любые хаки или трюки также приветствуются. Я просто хочу использовать профиль сейчас. Спасибо

Ответы [ 2 ]

0 голосов
/ 14 февраля 2020

Очевидно, что это давняя проблема с профилировщиком PyCharm, он не запускает пакетов правильно, в результате чего sys.path работает некорректно и относительный импорт завершается неудачно: https://youtrack.jetbrains.com/issue/PY-28509

Полагаю, можно было бы создать свой собственный "скрипт запуска", просто копируя что flask.__main__ делает .

Хотя вещи могут также сработают, если вы запустите -m flask.cli вместо -m flask (я не знаю, я не проверял это): он делает то же самое но не вызывает файл __main__, чтобы он мог вести себя лучше.

0 голосов
/ 14 февраля 2020

[Новое решение]

Благодаря @Masklinn, использование -m flask.cli instread из -m flask может решить эту проблему. Однако в конфигурации pycharm flask используется -m flask по умолчанию, и я не могу найти способ ее изменить. Поэтому я предлагаю использовать pycharm python. script path должен быть установлен на FLASK_APP и добавить -m flask.cli в addtional options.

[Устаревшее решение]

Одним из решений является прямое изменение __init__.py, чтобы оно заработало. Например, измените

from . import json
from .app import Flask

на

from flask import json
from flask.app import Flask
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...