Как предотвратить использование osx python flask 2.7 - PullRequest
0 голосов
/ 10 февраля 2020

Я добавил следующий псевдоним к своему ~/.bash_profile, чтобы запустить python3 .8 вместо стандартного osx 2.7 .: alias python=/usr/local/bin/python3. Итак, теперь, когда я запускаю python --version, я успешно вижу, что я запускаю python 3.8.

Проблема в том, что когда я запускаю приложение flask, оно, похоже, все еще ссылается на python2 .7 в моей системе, как отмечено в трассировке стека:

$ env FLASK_APP=server.py flask run
 * Serving Flask app "server.py"
 * Environment: production
   WARNING: This is a development server. Do not use it in a production deployment.
   Use a production WSGI server instead.
 * Debug mode: off
Traceback (most recent call last):
  File "/usr/local/bin/flask", line 11, in <module>
    sys.exit(main())
  File "/Library/Python/2.7/site-packages/flask/cli.py", line 966, in main
    cli.main(prog_name="python -m flask" if as_module else None)
  File "/Library/Python/2.7/site-packages/flask/cli.py", line 586, in main
    return super(FlaskGroup, self).main(*args, **kwargs)
  File "/Library/Python/2.7/site-packages/click/core.py", line 717, in main
    rv = self.invoke(ctx)
  File "/Library/Python/2.7/site-packages/click/core.py", line 1137, in invoke
    return _process_result(sub_ctx.command.invoke(sub_ctx))
  File "/Library/Python/2.7/site-packages/click/core.py", line 956, in invoke
    return ctx.invoke(self.callback, **ctx.params)
  File "/Library/Python/2.7/site-packages/click/core.py", line 555, in invoke
    return callback(*args, **kwargs)
  File "/Library/Python/2.7/site-packages/click/decorators.py", line 64, in new_func
    return ctx.invoke(f, obj, *args, **kwargs)
  File "/Library/Python/2.7/site-packages/click/core.py", line 555, in invoke
    return callback(*args, **kwargs)
  File "/Library/Python/2.7/site-packages/flask/cli.py", line 848, in run_command
    app = DispatchingApp(info.load_app, use_eager_loading=eager_loading)
  File "/Library/Python/2.7/site-packages/flask/cli.py", line 305, in __init__
    self._load_unlocked()
  File "/Library/Python/2.7/site-packages/flask/cli.py", line 330, in _load_unlocked
    self._app = rv = self.loader()
  File "/Library/Python/2.7/site-packages/flask/cli.py", line 388, in load_app
    app = locate_app(self, import_name, name)
  File "/Library/Python/2.7/site-packages/flask/cli.py", line 240, in locate_app
    __import__(module_name)
  File "/Users/vismarkjuarez/Documents/Github/Distributed-Systems/app/server.py", line 18
    return f'Welcome to Quiz API v1!'

Я новичок в Python - как мне получить python 2.7, чтобы прекратить ссылаться?

Ответы [ 2 ]

1 голос
/ 10 февраля 2020

Не совсем уверен, как настроен ваш профиль или указаны переменные окружения c, но очень часто используются виртуальные среды. venv встроен в python, что создаст «среду» для вашего проекта.

Вы можете создать виртуальную среду, позвонив по номеру

$python3 -m venv venv

. Это создаст папку в вашем текущем каталоге, которую вы должны найти.

$ source venv/bin/activate

Это должно изменить вашу терминальную линию, чтобы показать, что вы находитесь в окружающей среде. Затем вы можете проверить, используете ли вы python three.

$ which python
>> /<path-to-current-directory>/venv/bin/python

Вы заметите, что теперь вам нужно переустановить все пакеты, которые вы хотите использовать. Это потому, что все это самодостаточно.

$ pip list

Package    Version
---------- -------
pip        19.0.3 
setuptools 40.8.0 

После того, как ваш pip снова установит все ваши пакеты и запустит ваш код при активированной виртуальной среде, все сценарии python вернутся к этой python версии, с которой вы создали среду. Он был создан специально для таких времен.

Так что, если вы хотите следовать в своем терминале, вы можете сделать следующее. Знак доллара означает новую команду в терминале и не требует ввода.

$ python3 -m venv venv
$ source venv/bin/activate
$ pip install --upgrade pip
$ pip install flask==1.1.1

Затем я создал небольшой файл с именем app.py со следующим содержимым

from flask import Flask
app = Flask(__name__)

@app.route("/")
def hello():
    return "Hello World!"

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

Затем запуск

$ env FLASK_APP=app.py flask run 

запускает приложение в python3

Изменение псевдонима в вашем ~/.bash_profile просто меняет вызов, когда вы лично набираете python в своем терминале. Не меняется, где приложения и программы будут искать python. Они используют ваши переменные окружения и в настоящее время установка python по умолчанию - python2. Вы также можете изменить интерпретатор, который ищет ваш скрипт python, используя строку shebang в качестве первой строки вашего файла

#!/usr/bin/python3

или

#!/usr/bin/env python
1 голос
/ 10 февраля 2020

Вы должны попытаться создать виртуальную среду, чтобы проверить, решает ли это вашу проблему.

есть различные способы достижения этой цели, но большинство из них состоит из создания venv -> активации venv и последующего запуска * 1006. * программа, когда venv активен

Примечание: IDE, например Pycharm, может быть настроен на автоматическую активацию venv для запуска локального сервера с помощью диалога «Конфигурации».

...