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

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

新規登録して質問してみよう
ただいま回答率
85.30%
CentOS

CentOSは、主にRed Hat Enterprise Linux(RHEL)をベースにした、フリーのソフトウェアオペレーティングシステムです。

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

MacOS(OSX)

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

VirtualBox

VirtualBoxは、現在米オラクル社が開発している、 x86仮想化ソフトウェア・パッケージの一つです。

Q&A

解決済

1回答

1605閲覧

Python3でパッケージをインストールしてもimportできないでエラーになる

One_of_Arthur

総合スコア82

CentOS

CentOSは、主にRed Hat Enterprise Linux(RHEL)をベースにした、フリーのソフトウェアオペレーティングシステムです。

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

MacOS(OSX)

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

VirtualBox

VirtualBoxは、現在米オラクル社が開発している、 x86仮想化ソフトウェア・パッケージの一つです。

0グッド

0クリップ

投稿2023/07/23 10:59

編集2023/07/26 02:15

実現したいこと

Python3でモジュールをインポートしたい

前提

Mac上のVirtualBoxでCentOS7をインストールし、webサーバーのテスト環境を構築しています。
CGIとしてPython3をMacのwebブラウザから走らせるとこまでは行きました。
ところが、CentOS7の端末でパッケージをpip3でインストールしてもインポートがされず、エラーになってしまい困っています。
恐らく、環境変数で解決するのだと思い、パッケージのインストール先を設定してみたのですが、変わらずエラーになってしまいます。

発生している問題・エラーメッセージ

webブラウザ

1Internal Server Error 2 3The server encountered an internal error or misconfiguration and was unable to complete your request. 4 5Please contact the server administrator at root@localhost to inform them of the time this error occurred, and the actions you performed just before this error. 6 7More information about this error may be available in the server error log.
/var/log/httpd/error_log [Sun Jul 23 19:12:54.769334 2023] [cgi:error] [pid 1642] [client 192.168.1.97:57508] AH01215: Traceback (most recent call last): [Sun Jul 23 19:12:54.769418 2023] [cgi:error] [pid 1642] [client 192.168.1.97:57508] AH01215: File "/var/www/html/user-new.py", line 5, in <module> [Sun Jul 23 19:12:54.769451 2023] [cgi:error] [pid 1642] [client 192.168.1.97:57508] AH01215: import requests # conda install requests [Sun Jul 23 19:12:54.769479 2023] [cgi:error] [pid 1642] [client 192.168.1.97:57508] AH01215: ModuleNotFoundError: No module named 'requests' [Sun Jul 23 19:12:54.775795 2023] [cgi:error] [pid 1642] [client 192.168.1.97:57508] End of script output before headers: user-new.py

該当のソースコード

Python3

1#!/usr/local/bin/python3.7 2# coding:utf-8 3 4import cgi 5import requests # conda install requests 6#import sys 7#import json 8#import mysql.connector # conda install mysql-connector-python 9#import string 10#import secrets 11 12#randomSize = 64 # randomのバイト数 13 14print('Content-Type: text/html\n\n') 15print('Status: 200 OK')

試したこと

/var/www/html/user-new.py
/var/www/html/
ともにパーミッションは755です。

CentOS7の端末
# pip3 install requests

Defaulting to user installation because normal site-packages is not writeable Requirement already satisfied: requests in ./.local/lib/python3.7/site-packages (2.31.0) Requirement already satisfied: charset-normalizer<4,>=2 in ./.local/lib/python3.7/site-packages (from requests) (3.2.0) Requirement already satisfied: idna<4,>=2.5 in ./.local/lib/python3.7/site-packages (from requests) (3.4) Requirement already satisfied: urllib3<3,>=1.21.1 in ./.local/lib/python3.7/site-packages (from requests) (2.0.4) Requirement already satisfied: certifi>=2017.4.17 in ./.local/lib/python3.7/site-packages (from requests) (2023.7.22)

# sudo gedit .bash_profile

# .bash_profile # Get the aliases and functions if [ -f ~/.bashrc ]; then . ~/.bashrc fi # User specific environment and startup programs PATH=$PATH:$HOME/.local/bin:$HOME/bin export PATH export PYTHONPATH='/home/apple2c/.local/lib/python3.7/site-packages'

補足情報(FW/ツールのバージョンなど)

macOS Big Sur 11.7.8
VirtualBox バージョン 7.0.10 r158379 (Qt5.15.2)
CentOS Linux release 7.9.2009 (Core)
Python 3.7.16

追伸

皆様、アドバイス有難う御座います!
今、皆様のアドバイスや指示を受けて、試行錯誤している最中です。
追って、中間報告と追記をいたします。

追記 (中間報告) 2023.07.25 18:18

色々弄り回してしまっていて、何をどうしたのか分からなくなっていたので、とりあえずスナップショットで遡ってみました。
/usr/local/bin/python3.7
がある状態で、
~/.local/
にディレクトリ「lib」も、その下の「python3.7」もない状態です。

CentOS7の端末
$ pip3 --version
pip 22.0.4 from /usr/local/lib/python3.7/site-packages/pip (python 3.7)
となりますが、
$ pyrhon3 --version
bash: pyrhon3: コマンドが見つかりませんでした...
となります。
しかし、
$ which python3
/usr/local/bin/python3
となります。これらは、あとになって分かったことです。
確か、この時に
$ pip3 install requests
を実行したと思います。すると、~/.local/lib/python3.7/site-packages/requests/が作られました。そして、

(省略) WARNING: You are using pip version 22.0.4; however, version 23.2.1 is available. You should consider upgrading via the '/usr/local/bin/python3.7 -m pip install --upgrade pip' command.

と表示されたので、そのまま従って、
$ /usr/local/bin/python3.7 -m pip install --upgrade pip
を実行すると、/.local/bin/の下に、pip、pip3、pip3.7、pip3.11、が作られました。そして、

(省略) WARNING: You are using pip version 22.0.4; however, version 23.2.1 is available. You should consider upgrading via the '/usr/local/bin/python3.7 -m pip install --upgrade pip' command.

と表示されたので、そのまま従って、
$ /usr/local/bin/python3.7 -m pip install --upgrade pip
を実行すると、

Defaulting to user installation because normal site-packages is not writeable Requirement already satisfied: pip in ./lib/python3.7/site-packages (23.2.1)

と表示されました。
あとになって、この英文をグーグル翻訳したところ、そのディレクトリに書き込めないので、~/の下に作られたようです。
それで、パーミッションとオーナー、グループを確認したところ、当然なのですが、
drwxr-xr-x. 8 root root 179 7月 23 14:01 site-packages
となっています。なので、
$ sudo pip3 install requests
だと、
sudo: pip3: コマンドが見つかりません
となったので、
$ sudo '/usr/local/bin/pip3' install requests
で実行してみたところ、/usr/local/lib/python3.7/site-packages/requests/が作られましたが、

WARNING: Running pip as the 'root' user can result in broken permissions and conflicting behaviour with the system package manager. It is recommended to use a virtual environment instead: https://pip.pypa.io/warnings/venv WARNING: You are using pip version 22.0.4; however, version 23.2.1 is available. You should consider upgrading via the '/usr/local/bin/python3.7 -m pip install --upgrade pip' command.

と、表示されていました。
確か、こういう操作をしたと思います。

この時点で、先述のuser-new.pyをMacのwebブラウザで開いてみました。
Internal Server Errorが出ましたので、/var/log/httpd/error_logを見ると

[Tue Jul 25 18:12:19.756785 2023] [cgi:error] [pid 3204] [client 192.168.1.97:53993] AH01215: Traceback (most recent call last): [Tue Jul 25 18:12:19.757036 2023] [cgi:error] [pid 3204] [client 192.168.1.97:53993] AH01215: File "/var/www/html/user-new.py", line 5, in <module> [Tue Jul 25 18:12:19.757075 2023] [cgi:error] [pid 3204] [client 192.168.1.97:53993] AH01215: import requests # conda install requests [Tue Jul 25 18:12:19.757128 2023] [cgi:error] [pid 3204] [client 192.168.1.97:53993] AH01215: File "/usr/local/lib/python3.7/site-packages/requests/__init__.py", line 43, in <module> [Tue Jul 25 18:12:19.757142 2023] [cgi:error] [pid 3204] [client 192.168.1.97:53993] AH01215: import urllib3 [Tue Jul 25 18:12:19.757195 2023] [cgi:error] [pid 3204] [client 192.168.1.97:53993] AH01215: File "/usr/local/lib/python3.7/site-packages/urllib3/__init__.py", line 42, in <module> [Tue Jul 25 18:12:19.757231 2023] [cgi:error] [pid 3204] [client 192.168.1.97:53993] AH01215: "urllib3 v2.0 only supports OpenSSL 1.1.1+, currently " [Tue Jul 25 18:12:19.757342 2023] [cgi:error] [pid 3204] [client 192.168.1.97:53993] AH01215: ImportError: urllib3 v2.0 only supports OpenSSL 1.1.1+, currently the 'ssl' module is compiled with 'OpenSSL 1.0.2k-fips 26 Jan 2017'. See: https://github.com/urllib3/urllib3/issues/2168 [Tue Jul 25 18:12:19.772410 2023] [cgi:error] [pid 3204] [client 192.168.1.97:53993] End of script output before headers: user-new.py

となっており、質問投稿した最初の時と少し違っています。

追記 (上記の中間報告のあとです) 2023.07.25 18:44

$ which pip3

/usr/local/bin/pip3

$ pip3 show requests

Location: /home/apple2c/.local/lib/python3.7/site-packages

test001.py
パーミッション755

Python3

1import sys 2import pprint 3pprint.pprint(sys.path)

の結果

Internal Server Error The server encountered an internal error or misconfiguration and was unable to complete your request. Please contact the server administrator at root@localhost to inform them of the time this error occurred, and the actions you performed just before this error. More information about this error may be available in the server error log.

/var/log/httpd/error_log

[Tue Jul 25 18:32:22.289263 2023] [cgi:error] [pid 1679] [client 192.168.1.97:54141] AH01215: (8)Exec format error: exec of '/var/www/html/test001.py' failed [Tue Jul 25 18:32:22.289733 2023] [cgi:error] [pid 1679] [client 192.168.1.97:54141] End of script output before headers: test001.py

なので、CentOS7の端末で実行してみました。

$ which python3 /usr/local/bin/python3 [apple2c@localhost root]$ /usr/local/bin/python3 Python 3.7.16 (default, Jul 23 2023, 13:59:10) [GCC 4.8.5 20150623 (Red Hat 4.8.5-44)] on linux Type "help", "copyright", "credits" or "license" for more information. >>> import sys >>> import pprint >>> pprint.pprint(sys.path) ['', '/usr/local/lib/python37.zip', '/usr/local/lib/python3.7', '/usr/local/lib/python3.7/lib-dynload', '/home/apple2c/.local/lib/python3.7/site-packages', '/usr/local/lib/python3.7/site-packages']

となりましたので、先述の
$ pip3 show requests
で表示されているパスが含まれているようです。

追記 2023.07.25 18:48

失礼しました。タイプミスですね。
$ python3 --version

Python 3.7.16

となりました。

追記 2023.07.25 20:31

>CGIとして実行されるときのpythonインタープリタの設定
すみません。どうやるのか分かりません。

Pythonのインストールですが、スナップショットを遡ってみたところ、
https://www.python.jp/install/centos/index.html
を参考にして、
https://pythonlinks.python.jp/ja/index.html
からダウンロードしたものを使っているようです。
これ、非公式ですね。
色々と弄り回していて、たまたまうまく行ったように見えていたものをそのまま使っているようです。
Pythonは、最新ではなく3.7.xが必要です。
pip3はどうやってインストールしたか、思い出せません。
この時点で、~/.local/があるので、もうひとつ遡ってみました。
すると、Python3が見当たらないのですが、~/.local/があります。
$ which python3

/usr/bin/which: no python3 in (/usr/local/bin:/usr/local/sbin:/usr/bin:/usr/sbin:/bin:/sbin:/home/apple2c/.local/bin:/home/apple2c/bin)

これで、本文の最大文字数の限界のようなので、続きは新規スレッドを立てました。
https://teratail.com/questions/irgq73vifgeyue

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

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

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

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

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

ikedas

2023/07/24 02:46

・Cent OS 7にPythonおよびpip (pip3) をインストールした手順を、実行した通りに示してください。 ・pip3がインストールされている場所はどこでしょうか。次のコマンドを実行するとわかります。 which pip3 いずれも、質問文を編集して書き加えてください (コメントに返答をもらっても隠れてしまいますので他の人に読めません)。
jbpb0

2023/07/24 06:15 編集

質問者さん pip3 install requests を実行したのと同じ状態で pip3 show requests を実行してください いろいろ表示される中に「Location:」で始まる行があるので、そこに書かれてるパスを記録してください 次に、pythonで import requests がうまくいかない状態で、下記のpythonコードを実行してください import sys import pprint pprint.pprint(sys.path) たくさんパスが表示されますが、その中にpip3 show...で記録したパスが入ってますでしょうか? 入ってないとインポートできません
ikedas

2023/07/24 07:26

jbpb0さん そもそもPythonが/usr/local配下にインストールされているらしく、pip3のPythonがそれと同じものなのかも不明なのですよね。あと下でも書きましたが--userオプションが有効になっているらしいのもちょっと不思議です。
TakaiY

2023/07/24 10:46

いくつもコメント付いていますが、追加です。 >CentOS7の端末でパッケージをpip3でインストールしてもインポートがされず、エラーになってしまい困っています。 とありますが、質問にはそれを示すエラーがありません。 どのような操作を行なったときに「インポートされない」状態になりましたか。実際のエラーメッセージを含めて、「実行した」などではなく、具体的な手順/方法を追記してください。 他の方もそうですが、システムに複数のpythonがインストールされていて、pipでインストールした場所と使っているpythonの場所が異なるのではないかと思てちます。それを確認するためにいろいろ質問が出ています。 また、この件について、.bash_profileで設定するPATHは、実行される pythonやpipの場所には影響ありますが、モジュールの読み込みには基本的に関係ありません。
ikedas

2023/07/24 11:32

TakaiYさん httpdのerror_logにトレースバックが出ていて、ModuleNotFound例外が上がってます。 One_of_Arthurさん みんないろいろなことをいってますが、基本的には解決に必要な情報を求めているだけです。上から順番に答えていっていただければいいです。 私はしばらく黙ります。
TakaiY

2023/07/25 00:52

> httpdのerror_logにトレースバックが出ていて ikedasさん、情報ありがとうございます。 出てますね。 CGIとして実行されるときのpythonインタープリタの設定はどのようないなっていますか? ソースで 「#!/usr/local/bin/python3.7」が指定されていますが、これが使われない実行されかたになっている可能性もあります。
ikedas

2023/07/25 09:37 編集

> $ pyrhon3 --version > bash: pyrhon3: コマンドが見つかりませんでした... > となります。 「python3」が「pyrhon3」になっています。 > とりあえずスナップショットで遡ってみました。 > /usr/local/bin/python3.7 > がある状態で、 > ~/.local/ > にディレクトリ「lib」も、その下の「python3.7」もない状態です。 ~/.local/もない状態まで遡れませんか。これがあると、同じ結果になりますので。 というか、最初の問いかけ | ・Cent OS 7にPythonおよびpip (pip3) をインストールした手順を、実行した通りに示してください。 に答えていただけていないので、私としては解決への道を探ることに着手できません。 説明が難しい (たとえば、Pythonのインストールはほかの人にやってもらったのでわからない) のであれば、そう言ってください。
ikedas

2023/07/25 09:45 編集

(これは質問者さんに向けたコメントではありません。ここにコメントなさる方への参考情報) 個人的には、/usr/local配下のPythonは、homebrewでインストールされたものなのではないかと疑っています。 (参考情報おわり)
jbpb0

2023/07/25 10:17

質問者さん 「該当のソースコード」(user-new.py?)と同じに、「test001.py」の先頭に #!/usr/local/bin/python3.7 を追加して、実行してみてください それでもうまく実行できないなら、「該当のソースコード」の、エラーが出てる「import requests」のすぐ上に import sys import pprint pprint.pprint(sys.path) を追加して、そちらを実行してみてください
jbpb0

2023/07/25 10:24

質問者さん > CentOS7の端末で実行してみました。 > $ pip3 show requests で表示されているパスが含まれているようです。 上記確認をした時と同じやり方で端末で起動したpythonで import requests を実行したら、 > ModuleNotFoundError: No module named 'requests' というエラーは出るのでしょうか?
One_of_Arthur

2023/07/25 11:35

ちょっと見づらいと思いますが、続きをこちらに貼っておきます。 質問投稿した最初の状態で、 ```python3 #!/usr/local/bin/python3.7 # coding:utf-8 import sys import pprint pprint.pprint(sys.path) ``` の結果、 ``` Internal Server Error The server encountered an internal error or misconfiguration and was unable to complete your request. Please contact the server administrator at root@localhost to inform them of the time this error occurred, and the actions you performed just before this error. More information about this error may be available in the server error log. ``` **/var/log/httpd/error_log** ``` [Tue Jul 25 20:15:14.547630 2023] [cgi:error] [pid 3205] [client 192.168.1.97:55121] malformed header from script 'test001.py': Bad header: ['/var/www/html', ``` そこで以下のようにしてみました。 ```python3 #!/usr/local/bin/python3.7 # coding:utf-8 import sys import pprint print('Content-Type: text/html\n\n') print('Status: 200 OK') pprint.pprint(sys.path) ``` の結果 ``` Status: 200 OK ['/var/www/html', '/usr/local/lib/python37.zip', '/usr/local/lib/python3.7', '/usr/local/lib/python3.7/lib-dynload', '/usr/local/lib/python3.7/site-packages'] ``` **CentOS7の端末** ``` $ python3 Python 3.7.16 (default, Jul 23 2023, 13:59:10) [GCC 4.8.5 20150623 (Red Hat 4.8.5-44)] on linux Type "help", "copyright", "credits" or "license" for more information. >>> import requests Traceback (most recent call last): File "<stdin>", line 1, in <module> File "/home/apple2c/.local/lib/python3.7/site-packages/requests/__init__.py", line 43, in <module> import urllib3 File "/home/apple2c/.local/lib/python3.7/site-packages/urllib3/__init__.py", line 42, in <module> "urllib3 v2.0 only supports OpenSSL 1.1.1+, currently " ImportError: urllib3 v2.0 only supports OpenSSL 1.1.1+, currently the 'ssl' module is compiled with 'OpenSSL 1.0.2k-fips 26 Jan 2017'. See: https://github.com/urllib3/urllib3/issues/2168 >>> ``` となりました。
ikedas

2023/07/25 13:41 編集

> これで、本文の最大文字数の限界のようなので、続きが書けません。 えっ。そんなことあるの。 じゃあそれはシステムの制限なんで、「続き」として新たに質問立ててもいいんじゃないかな。続きの質問へのリンクを記しておいてもらえば問題ないでしょう。
jbpb0

2023/07/25 14:26 編集

質問者さん > Status: 200 OK ['/var/www/html', '/usr/local/lib/python37.zip', '/usr/local/lib/python3.7', '/usr/local/lib/python3.7/lib-dynload', '/usr/local/lib/python3.7/site-packages'] には > Location: /home/apple2c/.local/lib/python3.7/site-packages が含まれてないので、そこに有る「requests」はインポートできず、 > ModuleNotFoundError: No module named 'requests' となります 一方、端末で起動したpythonの > ['', '/usr/local/lib/python37.zip', '/usr/local/lib/python3.7', '/usr/local/lib/python3.7/lib-dynload', '/home/apple2c/.local/lib/python3.7/site-packages', '/usr/local/lib/python3.7/site-packages'] には > Location: /home/apple2c/.local/lib/python3.7/site-packages が含まれてるので、 > File "/home/apple2c/.local/lib/python3.7/site-packages/requests/__init__.py", line 43, in <module> と、「requests」がインポートできます (その後、別のエラーが出てますが) 【追記】 import requests よりも先(上)で、「sys.path」に '/home/apple2c/.local/lib/python3.7/site-packages' を追加しておけば、たぶんインポートできると思います 参考 https://www.sejuku.net/blog/66459#index_id7
ikedas

2023/07/26 00:00 編集

使っているPythonの素性がようやく知れたので (正直、CentOSのつもりでmacOSのコンソールで作業している可能性まで考えていました)、整理しましょう。 * Python 3.7が必要なのは理解しました。 * モジュールを ~/.local/lib/python3.7/site-packages/ にインストールしなければならない理由はあるのでしょうか。なければ、/usr/local/lib/python3.7/site-packages/ にインストールした方が、sys.path をコードに書いたりといった複雑なことをしなくてすみます。 * モジュールを /usr/local/lib/python3.7/site-packages/ にインストールするには、root権限で pip3 を実行する必要があります。質問者さんは、CentOS7で su や sudo を実行できますか (わからなければわかる人に確認してください)。
guest

回答1

0

ベストアンサー

実行しようとしているのは、#!/usr/local/bin/python3.7という記述からして、/usr/local/bin/python3.7もPythonです。
requestsをインストールしたのは、

Defaulting to user installation because normal site-packages is not writeable
Requirement already satisfied: requests in ./.local/lib/python3.7/site-packages (2.31.0)
・・・・

というメッセージからして、$HOME/.local/binのPythonです。

それら2つのPythonは無関係なので、実際に使うPythonでライブラリをインストールしましょう。
/usr/local/bin/python3.7 -m pip install requests
もしくは使いたい$HOMEの下のPythonの絶対パスをスクリプト1行目の#!の後に指定しましょう。

投稿2023/07/23 12:13

otn

総合スコア86324

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

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

ikedas

2023/07/24 02:43

$HOME/.local はpipを--userオプションつきで実行した場合のインストールパスです (このオプションがデフォルトで有効になっているらしいのは不思議なのですが、それはともかく)。この配下にPythonがインストールされているわけではないと考えます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.30%

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

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

質問する

関連した質問