🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
Flask

FlaskはPython用のマイクロフレームワークであり、Werkzeug・Jinja 2・good intentionsをベースにしています。

MacOS(OSX)

MacOSとは、Appleの開発していたGUI(グラフィカルユーザーインターフェース)を採用したオペレーションシステム(OS)です。Macintoshと共に、市場に出てGUIの普及に大きく貢献しました。

バージョン管理

バージョン管理はコンピューター上にファイルとして格納されているドキュメント・プログラム・その他の情報の変更履歴等を管理するものです

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

pip

pipとは、Pythonを用いて書かれているパッケージソフトのインストールや管理を行うためのパッケージマネジメントシステムです。pipを使う主なメリットは、コマンドラインインターフェースにて容易にPythonパッケージソフトをインストール可能だという点です。

Q&A

解決済

1回答

8946閲覧

PythonでFlaskが使えません。

rein_deer

総合スコア6

Flask

FlaskはPython用のマイクロフレームワークであり、Werkzeug・Jinja 2・good intentionsをベースにしています。

MacOS(OSX)

MacOSとは、Appleの開発していたGUI(グラフィカルユーザーインターフェース)を採用したオペレーションシステム(OS)です。Macintoshと共に、市場に出てGUIの普及に大きく貢献しました。

バージョン管理

バージョン管理はコンピューター上にファイルとして格納されているドキュメント・プログラム・その他の情報の変更履歴等を管理するものです

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

pip

pipとは、Pythonを用いて書かれているパッケージソフトのインストールや管理を行うためのパッケージマネジメントシステムです。pipを使う主なメリットは、コマンドラインインターフェースにて容易にPythonパッケージソフトをインストール可能だという点です。

0グッド

0クリップ

投稿2019/10/14 04:43

編集2019/10/15 04:00

こんにちは。
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

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

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

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

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

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

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


整理すると

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

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

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

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

sh

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

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


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

sh

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

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

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

sh

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

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

投稿2019/10/14 11:14

編集2019/10/15 04:27
quickquip

総合スコア11231

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

rein_deer

2019/10/14 13:09

回答ありがとうございます。 カレントディレクトリのflask.pyを削除することでコードが動くようになりました。 ターミナルに出ているWarningは無視して大丈夫なものでしょうか? 回答いただけると嬉しいです。
quickquip

2019/10/14 13:24 編集

Pythonはどこにどうインストールしたのでしょうか。 pip に sudo が必要だから付けたのでしょうか?
rein_deer

2019/10/14 13:36 編集

pythonはpyenvを使って/usr/local/var/pyenv/versions/3.7.4 にインストールしました。 情けないですが、今読んでいる「独学プログラマー」という本の手順通りにやったため必要かどうかは考えていませんでした。 sudo pip install Flask でインストールしろと書かれていたのでそれに従い行いました。
quickquip

2019/10/14 13:37

Please check the permissions and owner of that directory.  と書いてある通りの対応でいいんじゃないでしょうか。sudo してしまってrootがオーナーになっているファイルが混じってしまったのでしょう。
rein_deer

2019/10/14 13:41

回答ありがとうございます。 Please check the permissions and owner of that directory.  とは具体的にどのようにすれば良いのでしょうか?何度もすみませんが、回答していただけると嬉しいです。
rein_deer

2019/10/14 14:15 編集

回答ありがとうございます。 ls -ld /Users/ユーザ名/Library/Caches/pip/ ls -l /Users/ユーザ名/Library/Caches/pip/http/ を実行してみたのですが、所有者はどちらも以下のようにユーザになっていました。 drwxr-xr-x 3 ユーザ名 staff 96 10 14 12:37 1 一応、教えていただいた sudo chown -R ユーザ名: /Users/ユーザ名/Library/Caches/pip を実行してみるべきでしょうか? また、pip freeze した時に WARNING: Could not generate requirement for distribution -ask 1.1.1 (/usr/local/var/pyenv/versions/3.7.4/lib/python3.7/site-packages): Parse error at "'-ask==1.'": Expected W:(abcd...) WARNING: Could not generate requirement for distribution -lask 1.1.1 (/usr/local/var/pyenv/versions/3.7.4/lib/python3.7/site-packages): Parse error at "'-lask==1'": Expected W:(abcd...) WARNING: Could not generate requirement for distribution - ask (/usr/local/var/pyenv/versions/3.7.4/lib/python3.7/site-packages): Parse error at "'-===ask'": Expected W:(abcd...) WARNING: Could not generate requirement for distribution -.ask 1.1.1 (/usr/local/var/pyenv/versions/3.7.4/lib/python3.7/site-packages): Parse error at "'-.ask==1'": Expected W:(abcd...) といったWarningが出るのですが、こちらが原因ということは考えられますでしょうか? 何度もすみません。
quickquip

2019/10/14 14:37

(sudo pip installじゃなく) pip install で警告が出ないならcacheの権限の件は気にしなくていいでしょう。 今のmacOS向けじゃない、あまり普通じゃない手順を踏んでいるように見えます。(Linux向け? かすごく古いmacOS向け?) 何をやったのか全部書き出さないことには何がどうなっているのかはわかりません、というのが正直なところです。 一方で、全部書き出されても、OSをクリーンインストールしていいマシンじゃないと追試したくないという感じなので、何かコメントできることがあるかどうかは不確かです。
quickquip

2019/10/14 14:43 編集

コメント読み返しましたが、sudo pip の必要があったのか、pip でよかったのかは、わかってないってことでしょうか。
rein_deer

2019/10/14 14:49

コメントありがとうございます。 sudo pip の必要があったかは分かっていません。
rein_deer

2019/10/14 15:11

質問の補足に何をやったか書いてみました。 何度もすみませんが、見てもらってもよろしいでしょうか。
quickquip

2019/10/14 15:26

この質問はこちらからみると 謎の手順でインストールしたPythonにpipでパッケージをインストールするのに(sudo pipを使わないといけないのかpipを使えば十分なのか誰にも分かってないけれど)sudo pipを使ったら警告がでました。これはなぜでしょうか という状況になってしまっているので なんでそんなところにpyenvが入っているのか? いったいどうやってそこにpyenvを入れたのか? というのが焦点です。
rein_deer

2019/10/14 15:37

コメントありがとうございます。 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 source ~/.bash_profile このように書き込んだのでそこに入っているのかな?と思っているのですが、正直自信はありません。
quickquip

2019/10/14 23:55

この情報は質問に追記しましょう
rein_deer

2019/10/15 04:09 編集

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

2019/10/15 04:27

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

2019/10/15 04:47

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.36%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問