実現したいこと
自然言語ツールキットのnltkを使えるようにしたい
やったこと
NLTKのホームページにあるpip install --user -U nltkを実施したら以下のようなエラーが出ました
Traceback (most recent call last): File "/usr/local/bin/pip", line 6, in <module> from pkg_resources import load_entry_point File "/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/pkg_resources/__init__.py", line 3241, in <module> @_call_aside File "/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/pkg_resources/__init__.py", line 3225, in _call_aside f(*args, **kwargs) File "/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/pkg_resources/__init__.py", line 3254, in _initialize_master_working_set working_set = WorkingSet._build_master() File "/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/pkg_resources/__init__.py", line 585, in _build_master return cls._build_from_requirements(__requires__) File "/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/pkg_resources/__init__.py", line 598, in _build_from_requirements dists = ws.resolve(reqs, Environment()) File "/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/pkg_resources/__init__.py", line 786, in resolve raise DistributionNotFound(req, requirers) pkg_resources.DistributionNotFound: The 'pip==20.3' distribution was not found and is required by the application
そこでraise DistributionNotFoundで調べたところこちらの記事が見つかったので、pip install --upgrade setuptoolsを実施しましたがまたraise DistributionNotFoundエラーが出てしまいました。またこの辺りも試しましたがダメでした。知見をお持ちの方、よろしくお願いします。
> /System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/pkg_resources/__init__.py
Python 2.7に入れようとしてますよ
Python 3.*じゃないと入りませんけど、それは別途自分で入れてますか?
それとも、OS同梱のを使うのですか?
あ、本当ですね。元からMacに入ってる2系のPython消したいのでsudo rm -rf /Library/Frameworks/Python.framework/Versions/2.7とsudo rm -rf "/Applications/Python 2.7"を実行したのですが、python --version するとPython 2.7.16と表示されてしまいまだ残ってるようなのですが原因お分かりになったりしますでしょうか...?
しかしpyenvにはバージョンが3.9.7のPythonが入っております
> 元からMacに入ってる2系のPython消したい
それ消しても大丈夫ですか?
OSがそれ使ってたりしてませんかね?
(質問とは直接は関係無いですが)
> pyenvにはバージョンが3.9.7のPythonが入っております
ターミナルで下記を実行したら、状況分かるかも
which -a python
which -a python3
which -a pip
which -a pip3
>それ消しても大丈夫ですか?
OSがそれ使ってたりしてませんかね?
そうかもしれませんが、結果的には消えてないので今のところ大丈夫ですかね...?
ご提示いただいたコマンドの実行結果は以下になります。
/usr/bin/python
/usr/bin/python3
/usr/local/bin/pip
/usr/bin/pip3
「-a」を付けても、各一個ずつだけしか表示されませんでした?
はい、「-a」つけましたが上記のように1行ずつしか出ませんでした。
> pyenvにはバージョンが3.9.7のPythonが入っております
は、質問者さんがMacにインストールしたのですよね?
それはどこに入ってるのでしょうか?
インストールの際に、PATHの設定はしました?
>質問者さんがMacにインストールしたのですよね?
はい
>その際に、PATHの設定はしました?
.zshrcに書きました。
.zshr開くとこんな感じです。(Python3.3以上ではvirtualenvいらないという記事を見かけましたが。。)
export PYENV_ROOT="$HOME/.pyenv"
export PATH="$PYENV_ROOT/bin:$PATH"
eval "$(pyenv init -)"
eval "$(pyenv virtualenv-init -)"
ターミナルで
echo $PATH
を実行したら、「$HOME/.pyenv/bin」は含まれてますか?
(「$HOME」は自分のホームディレクトリに置き換えてください)
また、「$HOME/.pyenv/bin」には、「python」とか「pip」とか「python3」とか「pip3」とか、それらしい名前のファイルはありますか?
以下がecho $PATHの実行結果になります。それらしい名前は無さそうです...?
/usr/local/Cellar/pyenv-virtualenv/1.1.5/shims:/Users/m.t./.pyenv/bin:/bin:/sbin:/usr/bin:/usr/local/bin:usr/sbin:usr/local/bin/nodebrew:/Users/m.t./.npm_global/bin:
「/Users/m.t./.pyenv/bin」がそうです
$PATHにちゃんと入ってますね
pyenv versions
を実行したら、何て表示されますか?
* system (set by /Users/m.t./.pyenv/version)
3.9.7
と表示されます。
https://qiita.com/twipg/items/75fc9428e4c33ed429c0
の「pythonのバージョンの切り替え」を参考にして、「3.9.7」に切り替えてみてください
上記の方法でうまくバージョンが変わらないなら、
https://qiita.com/Kohey222/items/19eb9b3cbcec9b176625
の「pythonのバージョンを変更可能なバージョンに変更する」を見てください
pythonのバージョンが「3.9.7」に切り替わったら、再び
which -a python
which -a python3
which -a pip
which -a pip3
を実行してみてください
参考リンク、添付してくださりありがとうございます。
切り替えを行いまして$pyenv versionsを実行すると
system
* 3.9.7 (set by /Users/m.t./collect_comment_from_youtube/.python-version)
になりました。
python --version
も実行してバージョンを確認してください
「3.9.7」と表示されますか?
それも大丈夫なら、
which -a python
which -a python3
which -a pip
which -a pip3
を実行してみてください
たぶん「python」と「pip」はpyenvで入れたのが見つかるはず
$python --version
実行するといまだにPython 2.7.16ですね...。先ほど$pyenv local 3.9.7としたのですがloacalではなくglobalにしないとダメでしょうか?このcollect_comment_from_youtubeディレクトリだけ3.9.7を適用したいのですが。
https://qiita.com/Kohey222/items/19eb9b3cbcec9b176625
の「pythonのバージョンを変更可能なバージョンに変更する」に書かれてる手順でもダメですか?
(「global」は「local」に変えて)
そうですね、自分の場合はlocalですが$ eval "$(pyenv init -)"を実行し、$ python --versionしてもPython 2.7.16です...
すみませんが、pyenvはあまり使ってないので、詳しくは分からないです
(私はAnaconda使ってるので)
この質問とは別に、pyenvの使い方の質問を作った方が、詳しい方が回答してくれると思います
この質問のエラーは、pyenvで入れた3.9.*が使えるようになって、それに紐付いたpipが使えるようになれば、そのpipを使ってインストールすれば解決すると思います
(別のエラーが何か出るかもしれないけど、少なくとも前進はする)
【追記】
念の為にダメ元で、
python3 --version
も確認してみてください
$python3 --versionするとPython 3.8.2と出ました
「3.9.*」じゃないから、それはたぶんOS同梱のやつですよね
which python3
の結果は「/usr/bin/python3」ではないですかね
>which python3の結果は「/usr/bin/python3」ではないですかね
はい、そうでした
>「3.9.*」じゃないから、それはたぶんOS同梱のやつですよね
なんですかね?すると2.7.16はなんでしょう...?
ちなみに$ which pyenvすると~/.pyenv/bin/pyenvと出るかと思ったのですが、以下のように出てさらに困惑しています...
pyenv () {
local command
command="${1:-}"
if [ "$#" -gt 0 ]
then
shift
fi
case "$command" in
(activate | deactivate | rehash | shell) eval "$(pyenv "sh-$command" "$@")" ;;
(*) command pyenv "$command" "$@" ;;
esac
}
Macには、Python 2.*, 3.*が両方入ってるのです
(ただし、3.*はBig Sur以降)
参考
https://oku.edu.mie-u.ac.jp/~okumura/python/install.html
の最初のところと、「macOS Big Sur の Python」
お待たせいたしました。pythonのバージョンが切り替わりました。そこで先程の4パータンのwhichコマンドを実行すると
/Users/m.t./.pyenv/shims/python
/usr/bin/python
/usr/bin/python
/Users/m.t./.pyenv/shims/python3
/usr/bin/python3
/usr/bin/python3
/Users/m.t./.pyenv/shims/pip
/usr/local/bin/pip
/usr/local/bin/pip
/Users/m.t./.pyenv/shims/pip3
/usr/bin/pip3
/usr/bin/pip3
と表示されました。またどれも/usr/bin/python
/usr/bin/pythonのように同じのが2行出力されるのはなぜでしょうか?
> /usr/bin/python
/usr/bin/pythonのように同じのが2行出力されるのはなぜでしょうか?
$PATHに「/usr/bin」が2回登録されてるとそうなりますが、
> /usr/local/Cellar/pyenv-virtualenv/1.1.5/shims:/Users/m.t./.pyenv/bin:/bin:/sbin:/usr/bin:/usr/local/bin:usr/sbin:usr/local/bin/nodebrew:/Users/m.t./.npm_global/bin:
ではそうではないですね
上記は$PATHの全部ですか?
一部を省略したりしてませんか?
あと、$PATHの内で、下記は間違ってます
どちらも、先頭の「/」が足りない
usr/sbin
usr/local/bin/nodebrew
どんどん本題からずれてしまい、申し訳ありません。
今.zshrcファイル内は
export PS1='m.t.% '
export PATH=/bin:/sbin:/usr/bin:/usr/local/bin:/usr/sbin:/usr/local/bin/nodebrew:$HOME/.npm_global/bin:$PATH
export PYENV_ROOT="$HOME/.pyenv"
export PATH="$PYENV_ROOT/bin:$PATH"
eval "$(pyenv init -)"
eval "$(pyenv virtualenv-init -)"
eval "$(pyenv init --path)"
となっていて
echo $PATHをすると
/Users/m.t./.pyenv/shims:/usr/local/Cellar/pyenv-virtualenv/1.1.5/shims:/Users/m.t./.pyenv/bin:/bin:/sbin:/usr/bin:/usr/local/bin:usr/sbin:usr/local/bin/nodebrew:/Users/m.t./.npm_global/bin:/usr/local/Cellar/pyenv-virtualenv/1.1.5/shims:/Users/m.t./.pyenv/bin:/bin:/sbin:/usr/bin:/usr/local/bin:usr/sbin:usr/local/bin/nodebrew:/Users/m.t./.npm_global/bin:
と表示されます。.zshrcに2回書いてないのになぜecho $PATHすると2つ出てきてしまうのでしょうか...?
また本題ですが、pip3 install --user -U nltkを実行すれば良いでしょうか?
> pip3 install --user -U nltkを実行すれば良いでしょうか?
そうですね
やってみてください
入ったは入ったぽいのですが、
VScodeを使用しているのですが、依然import nltkの部分に黄色の波線が引かれ`Import "nltk" could not be resolvedPylancereportMissingImports`と書いてあり、認識されていないようです。。
> Import "nltk" could not be resolvedPylancereportMissingImports
は、VS Codeの「Pylance」が知らないと言ってるのであって、Pythonが知らないと言ってるわけではないです
Pythonでインポートして実行できるかどうかが重要です
VS Codeを使わないでPythonコードを実行したら、どうなりますか?
参考
https://teratail.com/questions/348579
Macのターミナルでのpython textsynthesis_with_markovchain.pyの実行結果は
Traceback (most recent call last):
File "/Users/t.m./collect_comment_from_youtube/textsynthesis_with_markovchain.py", line 10, in <module>
from nltk.sentiment import SentimentIntensityAnalyzer
ModuleNotFoundError: No module named 'nltk'
です。
pip3 install --user -U nltk
を実行したのと同じ状態で
pip3 show nltk
を実行してください
いろいろ表示される中に「Location:」で始まる行がありますので、そこに書かれてるパスを記録してください
次に、pythonで
from nltk.sentiment import SentimentIntensityAnalyzer
がうまくいかない状態で、下記のpythonコードを実行してください
import sys
import pprint
pprint.pprint(sys.path)
たくさんパスが表示されますが、その中にpip3 show...で記録したパスが入ってますでしょうか?
入ってないとimportできません
もし入ってなければ、pip3 install...を実行したpip3に紐付いてるpythonと、今使っているpythonが違う、ということです
python(python3?)もpip3も、どちらもpyenvで入れた3.9.*を使ってれば、pip3で入れたものはpython(python3?)でインポートできるはずです
インポートできないのなら、下記のどれかでしょう
・pip3でのインストールがうまくいってない
・違うpip3(OS同梱のとか)で入れてしまった
・違うpythonを使ってる
> python textsynthesis_with_markovchain.pyの実行結果は
念の為に、
python3 textsynthesis_with_markovchain.py
もやってみてください
もちろん、pyenvで入れた3.9.*が有効な状態で
こちらがpip3 show nltkの実行結果です
WARNING: Package(s) not found: nltk
何故かLocationで始める行が出力されません。。
こちらがご提示いただいたimport sysの3行をtextsynthesis_with_markovchain.pyに追記し、$python3 textsynthesis_with_markovchain.pyを実行した結果です。
['/Users/m.t./collect_comment_from_youtube',
'/Users/m.t./.pyenv/versions/3.9.7/lib/python39.zip',
'/Users/m.t./.pyenv/versions/3.9.7/lib/python3.9',
'/Users/m.t./.pyenv/versions/3.9.7/lib/python3.9/lib-dynload',
'/Users/m.t./.pyenv/versions/3.9.7/lib/python3.9/site-packages']
Traceback (most recent call last):
File "/Users/m.t./collect_comment_from_youtube/textsynthesis_with_markovchain.py", line 12, in <module>
from nltk.sentiment import SentimentIntensityAnalyzer
ModuleNotFoundError: No module named 'nltk'
sys.platfromと打ってもmacと出ず、zsh: command not found: sys.platformと出るので何かおかしいですね...
> Package(s) not found: nltk
インストールできてないようですけど
今下記を実行したら、何て表示されますか?
(もちろん、pyenvで入れた3.9.*が有効な状態で)
pip3 install --user -U nltk
pip3 install --user -U nltkの実行結果はこちらです。
Collecting nltk
Using cached nltk-3.6.2-py3-none-any.whl (1.5 MB)
Collecting regex
Downloading regex-2021.8.28-cp39-cp39-macosx_10_9_x86_64.whl (285 kB)
|████████████████████████████████| 285 kB 7.8 MB/s
Collecting click
Using cached click-8.0.1-py3-none-any.whl (97 kB)
Collecting joblib
Using cached joblib-1.0.1-py3-none-any.whl (303 kB)
Collecting tqdm
Using cached tqdm-4.62.2-py2.py3-none-any.whl (76 kB)
Installing collected packages: tqdm, regex, joblib, click, nltk
WARNING: The script tqdm is installed in '/Users/m.t./.local/bin' which is not on PATH.
Consider adding this directory to PATH or, if you prefer to suppress this warning, use --no-warn-script-location.
WARNING: The script nltk is installed in '/Users/m.t./.local/bin' which is not on PATH.
Consider adding this directory to PATH or, if you prefer to suppress this warning, use --no-warn-script-location.
Successfully installed click-8.0.1 joblib-1.0.1 nltk-3.6.2 regex-2021.8.28 tqdm-4.62.2
WARNING: You are using pip version 21.2.3; however, version 21.2.4 is available.
You should consider upgrading via the '/Users/m.t./.pyenv/versions/3.9.7/bin/python3.9 -m pip install --upgrade pip' command.
> zsh: command not found: sys.platformと出る
それは、Pythonを起動してない状態だからでしょう
Pythonを(対話モードで)起動して、
import sys
print(sys.platform)
を実行したら、当方のMacでは
darwin
と表示されます
> Using cached nltk-3.6.2-py3-none-any.whl (1.5 MB)
> Successfully installed click-8.0.1 joblib-1.0.1 nltk-3.6.2 regex-2021.8.28 tqdm-4.62.2
「nltk」が、今インストールされたようです
既にインストールされてたら、もう入ってる的な表示がされるはずなので
もう一度
pip3 show nltk
をやってみてください
pip3 show nltkの実行結果はこちらです。
Name: nltk
Version: 3.6.2
Summary: Natural Language Toolkit
Home-page: http://nltk.org/
Author: Steven Bird
Author-email: stevenbird1@gmail.com
License: Apache License, Version 2.0
Location: /Users/m.t./.local/lib/python3.9/site-packages
Requires: click, regex, joblib, tqdm
Required-by:
pip3で入れたのは
> Location: /Users/m.t./.local/lib/python3.9/site-packages
に入ってるけど、Pythonが探す「sys.path」は
> /Users/m.t./.pyenv/versions/3.9.7/lib/python3.9/site-packages
だから、見つからないのでインポートできません
Pythonの「sys.path」は「/Users/m.t./.pyenv/...」だから、pyenvで入れた3.9.7ですね
pip3の「Location:」は「/Users/m.t./.local/...」だから、pyenvのじゃないっぽい
Python 3.9が、pyenvのとは別にインストールされてませんか?
which -a pip3
を実行したら、何て表示されますか?
【追記】
もしかしたら、pyenvで「global」じゃなくて「loacal」にしたら、「/Users/m.t./.local/...」になるのかもしれないけど、すみませんが分かりません
which -a pip3を実行するとこうなります。
/Users/m.t./.pyenv/shims/pip3
/usr/bin/pip3
/Users/m.t./.pyenv/shims/pip3
/usr/bin/pip3
/usr/bin/pip3
大丈夫なようですね
もしかしたら、「pip3 install」に「--user」を付けたので別の場所に入ったのかも
pip3 install -U nltk
でインストールできますか?
こちらの記事によるとuserインストールだと~/.local配下に入るみたいです。https://pyteyon.hatenablog.com/entry/2019/05/24/003924
$pip3 install -U nltkを実行すると以下のような結果が出ました
Requirement already satisfied: nltk in /Users/m.t./.local/lib/python3.9/site-packages (3.6.2)
Requirement already satisfied: regex in /Users/m.t./.local/lib/python3.9/site-packages (from nltk) (2021.8.28)
Requirement already satisfied: tqdm in /Users/m.t./.local/lib/python3.9/site-packages (from nltk) (4.62.2)
Requirement already satisfied: click in /Users/m.t./.local/lib/python3.9/site-packages (from nltk) (8.0.1)
Requirement already satisfied: joblib in /Users/m.t./.local/lib/python3.9/site-packages (from nltk) (1.0.1)
WARNING: You are using pip version 21.2.3; however, version 21.2.4 is available.
You should consider upgrading via the '/Users/m.t./.pyenv/versions/3.9.7/bin/python3.9 -m pip install --upgrade pip' command.
コードの先頭に下記を追加してみてください
import sys
sys.path.append("/Users/m.t./.local/lib/python3.9/site-packages")
追加する前も追加した後も$python3 textsynthesis_with_markovchain.pyを実行すると以下のようになり、一応NLTKが効いてる(tokenizeされてる)みたいですがそちらのコードが効いてるかはどうやったらわかりますでしょうか...?
[nltk_data] Downloading package punkt to /Users/m.t./nltk_data...
[nltk_data] Package punkt is already up-to-date!
[nltk_data] Downloading package stopwords to /Users/m.t./nltk_data...
[nltk_data] Package stopwords is already up-to-date!
[nltk_data] Downloading package vader_lexicon to
[nltk_data] /Users/m.t./nltk_data...
[nltk_data] Package vader_lexicon is already up-to-date!
[nltk_data] Downloading package tagsets to /Users/m.t./nltk_data...
[nltk_data] Package tagsets is already up-to-date!
['It', "'s", 'a', 'gift', 'for', 'Mr.', 'Smith', '.']
あれ?
「sys.path.append()」をやらなくてもインポートできるのですか?
それならば「sys.path.append()」は不要です
sys.path.append()やってしまいました、、
それはコード内で実行したら一時的に追加されるだけなので、実行しなければいいだけです
すいません、ターミナルで対話モードにして実行してしまいました、、
実行した時のPythonでだけ有効で、「exit()」で終了したら設定消える
そうなのですね。ありがとうございます。
また、VScodeのnltkに引かれた波線が消えない原因ご存知だったりしますでしょうか?拡張機能のPylanceはインストールしてるのですが。。
VS Codeは使ってないので、分かりません
かしこまりました。jbpb0さんのおかげでnltk自体は使えるようになりましたこと感謝いたします。ありがとうございました!
回答1件
あなたの回答
tips
プレビュー