質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

87.61%

PythonでFlaskが使えません。

解決済

回答 1

投稿 編集

  • 評価
  • クリップ 0
  • VIEW 3,939

score 6

こんにちは。
python、パッケージ管理共に初心者のものです。

前提・実現したいこと

自分の開発環境?は、macOS Catalina, python3.7.4です。
python3(idle)でFlaskをインポートして使えるように、以下のコードが動くようにしたいです。

発生したエラー・できないこと

idleで以下のコードを実行すると

from flask import Flask

app = Flask(__name__)

@app.route('/')
def index():
    return "Hello, World!"


app.run(port=8000)


次のようなエラーが出て結果が表示されませんでした

Traceback (most recent call last):
  File "/Users/名前/Documents/flask.py", line 1, in <module>
    from flask import Flask
  File "/Users/名前/Documents/flask.py", line 1, in <module>
    from flask import Flask
ImportError: cannot import name 'Flask' from 'flask' (/Users/gaoyuanxiangxi/Documents/flask.py)

試してみたこと

ちゃんとFlaskをインストールできてないのではと思い、一度アンインストールしてみました。

sudo pip uninstall Flask
WARNING: The directory '/Users/名前/Library/Caches/pip/http' or its parent directory is not owned by the current user and the cache has been disabled. Please check the permissions and owner of that directory. If executing pip with sudo, you may want sudo's -H flag.


上のようなwarningが出たのですが、アンインストールは成功したので、とりあえずもう一度インストールしてみようと思い最初インストールしたコードと同じコードで再インストールしました。

sudo pip install Flask 
WARNING: The directory '/Users/名前/Library/Caches/pip/http' or its parent directory is not owned by the current user and the cache has been disabled. Please check the permissions and owner of that directory. If executing pip with sudo, you may want sudo's -H flag.
WARNING: The directory '/Users/名前/Library/Caches/pip' or its parent directory is not owned by the current user and caching wheels has been disabled. check the permissions and owner of that directory. If executing pip with sudo, you may want sudo's -H flag.


この後もう一度idleで一番上のコードを実行しましたが、また、同じエラーが出てしまいました。
その後も、sudo -H pip install Flask で再インストールしたり、自分で調べてみたのですが結果は変わりませんでした。
どうすればFlaskを使えるようになるでしょうか?また、ターミナルで出てくるWarningは何なのでしょうか。
回答よろしくお願いいたします。

補足

次のような手順でFlaskをインストールしたり、アンインストールして再インストールしてみたりしました。

sudo pip install Flask


次に一度アンインストールしようと思い、

pip uninstall Flask


しかし

ERROR: Exception:
Traceback (most recent call last):
  File "/usr/local/var/pyenv/versions/3.7.4/lib/python3.7/shutil.py", line 566, in move
    os.rename(src, real_dst)
PermissionError: [Errno 13] Permission denied: '/usr/local/var/pyenv/versions/3.7.4/lib/python3.7/site-packages/Flask-1.1.1.dist-info/' -> '/usr/local/var/pyenv/versions/3.7.4/lib/python3.7/site-packages/~%ask-1.1.1.dist-info'

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/usr/local/var/pyenv/versions/3.7.4/lib/python3.7/site-packages/pip/_internal/cli/base_command.py", line 188, in main
    status = self.run(options, args)
  File "/usr/local/var/pyenv/versions/3.7.4/lib/python3.7/site-packages/pip/_internal/commands/uninstall.py", line 75, in run
    auto_confirm=options.yes, verbose=self.verbosity > 0,
  File "/usr/local/var/pyenv/versions/3.7.4/lib/python3.7/site-packages/pip/_internal/req/req_install.py", line 831, in uninstall
    uninstalled_pathset.remove(auto_confirm, verbose)
  File "/usr/local/var/pyenv/versions/3.7.4/lib/python3.7/site-packages/pip/_internal/req/req_uninstall.py", line 388, in remove
    moved.stash(path)
  File "/usr/local/var/pyenv/versions/3.7.4/lib/python3.7/site-packages/pip/_internal/req/req_uninstall.py", line 277, in stash
    renames(path, new_path)
  File "/usr/local/var/pyenv/versions/3.7.4/lib/python3.7/site-packages/pip/_internal/utils/misc.py", line 402, in renames
    shutil.move(old, new)
  File "/usr/local/var/pyenv/versions/3.7.4/lib/python3.7/shutil.py", line 578, in move
    rmtree(src)
  File "/usr/local/var/pyenv/versions/3.7.4/lib/python3.7/shutil.py", line 494, in rmtree
    _rmtree_safe_fd(fd, path, onerror)
  File "/usr/local/var/pyenv/versions/3.7.4/lib/python3.7/shutil.py", line 452, in _rmtree_safe_fd
    onerror(os.unlink, fullname, sys.exc_info())
  File "/usr/local/var/pyenv/versions/3.7.4/lib/python3.7/shutil.py", line 450, in _rmtree_safe_fd
    os.unlink(entry.name, dir_fd=topfd)
PermissionError: [Errno 13] Permission denied: 'RECORD'


このようなエラーが出てしまい、sudo pip uninstall Flask ならどうだろうと試したら、一応アンインストールできました。
その後、``` sudo -H pip install Flask

```
pip install Flask


などで入れ直したりしてみましたが、うまくいかず結局もう一度 sudo でアンインストールして、

sudo pip install Flask


で入れているということになっています。

追記

python3は、pyenvで入れました。
pyenvはこのサイト https://qiita.com/crankcube@github/items/15f06b32ec56736fc43a
に従い、homebrewで入れました。
pyenvは、サイトに従い .bash_profileに

cat << 'EOS' >> ~/.bash_profile
# pyenvさんに~/.pyenvではなく、/usr/loca/var/pyenvを使うようにお願いする
export PYENV_ROOT=/usr/local/var/pyenv

# pyenvさんに自動補完機能を提供してもらう
if which pyenv > /dev/null; then eval "$(pyenv init -)"; fi

EOS


このように書き込みました。

  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 過去に投稿した質問と同じ内容の質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 1

checkベストアンサー

+2

カレントディレクトリにflask.pyがあるとflaskという名前のモジュールは、インストールしたパッケージのflaskじゃなくて、カレントディレクトリのflask.pyを指すせいで失敗しています。


整理すると

  • 本に書いてある手順とは関係なく、誰かが書いた「個人的な趣味でこう入れました」という記事に従ってPythonをインストールした
  • 誰かが書いた「個人的な趣味でこう入れました」という環境とは関係なく、本に書いてあるコマンドの通りにsudo pipでインストールしようとした
  • 上記の情報は書かなかった

ということになるかと思います。

/usr/local/var/pyenv/の所有者は一般ユーザになっているはずなので、sudoは必要なくpip install flaskでよかったはずです。
しかし、一度sudo pip install flaskしてしまったので、そこのディレクトリ内のファイル/ディレクトリのいずれかの所有者がrootになってしまっているのではないでしょうか。
それを確認しましょう。

そんなファイル/ディレクトリがあるなら

sudo chown -R ユーザ名: /usr/local/var/pyenv/ 


で所有者を一般ユーザにしてしまうのがいいでしょう。


(以下の追記は状況と合わないので撤回します)

ls -ld /Users/ユーザ名/Library/Caches/pip/
ls -l /Users/ユーザ名/Library/Caches/pip/http/


して所有者と権限を確認してください。

所有者がユーザになっていないと推測されます。その場合は所有者を変更しましょう。FInderを使わないならコマンドでは以下の通りです。

sudo chown -R ユーザ名: /Users/ユーザ名/Library/Caches/pip


(-R は配下のディレクトリ、ファイル全部を対象にします)
(ユーザ名の後にコロンを付けた方がいいと思います)

投稿

編集

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2019/10/15 13:07 編集

    ご指摘、回答ありがとうございます。
    /usr/local/var/pyenv/のディレクトリ、ファイルの中にroot権限になっているものが複数ありました。
    この場合、 sudo chown -R ユーザ名: /usr/local/var/pyenv/ で/usr/local/var/pyenv/の中の全ての所有者を変更しても構わないのでしょうか?
    何度もすみませんが回答お願いします。

    キャンセル

  • 2019/10/15 13:27

    いいと思いますよ。記述間違えてましたので修正しておきます。

    キャンセル

  • 2019/10/15 13:47

    回答ありがとうございます。
    所有者を変更することができました。
    ありがとうございました。

    キャンセル

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 87.61%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

同じタグがついた質問を見る