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

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回答

3438閲覧

(続き)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/26 02:14

編集2023/07/26 10:19

実現したいこと

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

前提

前スレッド
https://teratail.com/questions/8kvi6zxome86hb
の続きです。
最大文字数を超えて追記できなくなったので、新しくスレッドを立てました。

試したこと

pythton3

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

の結果、/var/log/httpd/error_log

[Wed Jul 26 10:44:57.558231 2023] [cgi:error] [pid 3205] [client 192.168.1.97:60706] AH01215: Traceback (most recent call last): [Wed Jul 26 10:44:57.558362 2023] [cgi:error] [pid 3205] [client 192.168.1.97:60706] AH01215: File "/var/www/html/user-new.py", line 6, in <module> [Wed Jul 26 10:44:57.558401 2023] [cgi:error] [pid 3205] [client 192.168.1.97:60706] AH01215: import requests # conda install requests [Wed Jul 26 10:44:57.558431 2023] [cgi:error] [pid 3205] [client 192.168.1.97:60706] AH01215: ModuleNotFoundError: No module named 'requests' [Wed Jul 26 10:44:57.560469 2023] [cgi:error] [pid 3205] [client 192.168.1.97:60706] End of script output before headers: user-new.py

CentOS7の端末
rootとsudoを試してみました。
少しごちゃごちゃやっていますが、alreadyと出ているので、すでにrequestsは、/usr/local/bin/python3.7に入っているのではないかと思います。(見やすいように空白行を入れてみました)
実際、CentOS7の「ファイル」で確認したところ/usr/local/lib/python3.7/site-packages/requestsフォルダーがありました。

[apple2c@localhost .local]$ su - パスワード: 最終ログイン: 2023/07/25 (火) 17:24:14 JST日時 pts/0 [root@localhost ~]# pip3 install requests Requirement already satisfied: requests in /usr/local/lib/python3.7/site-packages (2.31.0) Requirement already satisfied: idna<4,>=2.5 in /usr/local/lib/python3.7/site-packages (from requests) (3.4) Requirement already satisfied: urllib3<3,>=1.21.1 in /usr/local/lib/python3.7/site-packages (from requests) (2.0.4) Requirement already satisfied: charset-normalizer<4,>=2 in /usr/local/lib/python3.7/site-packages (from requests) (3.2.0) Requirement already satisfied: certifi>=2017.4.17 in /usr/local/lib/python3.7/site-packages (from requests) (2023.7.22) 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. [root@localhost ~]# /usr/local/bin/pip3 install requests Requirement already satisfied: requests in /usr/local/lib/python3.7/site-packages (2.31.0) Requirement already satisfied: urllib3<3,>=1.21.1 in /usr/local/lib/python3.7/site-packages (from requests) (2.0.4) Requirement already satisfied: idna<4,>=2.5 in /usr/local/lib/python3.7/site-packages (from requests) (3.4) Requirement already satisfied: charset-normalizer<4,>=2 in /usr/local/lib/python3.7/site-packages (from requests) (3.2.0) Requirement already satisfied: certifi>=2017.4.17 in /usr/local/lib/python3.7/site-packages (from requests) (2023.7.22) 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. [root@localhost ~]# /usr/local/bin/python3.7 -m pip install --upgrade pip Requirement already satisfied: pip in /usr/local/lib/python3.7/site-packages (22.0.4) Collecting pip Downloading pip-23.2.1-py3-none-any.whl (2.1 MB) ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 2.1/2.1 MB 7.8 MB/s eta 0:00:00 Installing collected packages: pip Attempting uninstall: pip Found existing installation: pip 22.0.4 Uninstalling pip-22.0.4: Successfully uninstalled pip-22.0.4 Successfully installed pip-23.2.1 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 [root@localhost ~]# python3 -m pip install requests Requirement already satisfied: requests in /usr/local/lib/python3.7/site-packages (2.31.0) Requirement already satisfied: charset-normalizer<4,>=2 in /usr/local/lib/python3.7/site-packages (from requests) (3.2.0) Requirement already satisfied: idna<4,>=2.5 in /usr/local/lib/python3.7/site-packages (from requests) (3.4) Requirement already satisfied: urllib3<3,>=1.21.1 in /usr/local/lib/python3.7/site-packages (from requests) (2.0.4) Requirement already satisfied: certifi>=2017.4.17 in /usr/local/lib/python3.7/site-packages (from requests) (2023.7.22) 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 [root@localhost ~]# su apple2c [apple2c@localhost root]$ sudo python3 -m pip install requests [sudo] apple2c のパスワード: sudo: python3: コマンドが見つかりません [apple2c@localhost root]$ sudo python -m pip install requests /bin/python: No module named pip [apple2c@localhost root]$ sudo /usr/local/bin/python3 -m pip install requests Requirement already satisfied: requests in /usr/local/lib/python3.7/site-packages (2.31.0) Requirement already satisfied: charset-normalizer<4,>=2 in /usr/local/lib/python3.7/site-packages (from requests) (3.2.0) Requirement already satisfied: idna<4,>=2.5 in /usr/local/lib/python3.7/site-packages (from requests) (3.4) Requirement already satisfied: urllib3<3,>=1.21.1 in /usr/local/lib/python3.7/site-packages (from requests) (2.0.4) Requirement already satisfied: certifi>=2017.4.17 in /usr/local/lib/python3.7/site-packages (from requests) (2023.7.22) 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 [apple2c@localhost root]$

一応、sys.path = '/usr/local/bin/python3.7/site-packages'も試してみました。

python3

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

の結果、/var/log/httpd/error_log

[Wed Jul 26 11:08:49.068180 2023] [cgi:error] [pid 1683] [client 192.168.1.97:60932] AH01215: Traceback (most recent call last): [Wed Jul 26 11:08:49.068313 2023] [cgi:error] [pid 1683] [client 192.168.1.97:60932] AH01215: File "/var/www/html/user-new.py", line 7, in <module> [Wed Jul 26 11:08:49.068353 2023] [cgi:error] [pid 1683] [client 192.168.1.97:60932] AH01215: import requests # conda install requests [Wed Jul 26 11:08:49.068460 2023] [cgi:error] [pid 1683] [client 192.168.1.97:60932] AH01215: ModuleNotFoundError: No module named 'requests' [Wed Jul 26 11:08:49.070691 2023] [cgi:error] [pid 1683] [client 192.168.1.97:60932] End of script output before headers: user-new.py

となりました。

追記 2023.07.26 13:52

sudo pip3 install requestsを試してみました。
しかし、pip3が見つからないようです。
環境変数はこれでいいか分かりませんが、よいなら/usr/local/bin/は入っています。

[apple2c@localhost ~]$ sudo pip3 install requests [sudo] apple2c のパスワード: sudo: pip3: コマンドが見つかりません [apple2c@localhost ~]$ echo $PATH /usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin:/home/apple2c/.local/bin:/home/apple2c/bin:/usr/local/bin/:/home/apple2c/.local/bin:/home/apple2c/bin:/usr/local/bin:/home/apple2c/.local/bin:/home/apple2c/bin [apple2c@localhost ~]$

そこで、sudo /usr/local/bin/pip3 install requestsとやってみると、pip3コマンドは通るようですが、alreadyと表示されます。

[apple2c@localhost ~]$ sudo /usr/local/bin/pip3 install requests [sudo] apple2c のパスワード: Requirement already satisfied: requests in /usr/local/lib/python3.7/site-packages (2.31.0) Requirement already satisfied: charset-normalizer<4,>=2 in /usr/local/lib/python3.7/site-packages (from requests) (3.2.0) Requirement already satisfied: idna<4,>=2.5 in /usr/local/lib/python3.7/site-packages (from requests) (3.4) Requirement already satisfied: urllib3<3,>=1.21.1 in /usr/local/lib/python3.7/site-packages (from requests) (2.0.4) Requirement already satisfied: certifi>=2017.4.17 in /usr/local/lib/python3.7/site-packages (from requests) (2023.7.22) 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 [apple2c@localhost ~]$

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

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

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

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

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

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

guest

回答1

0

ベストアンサー

pip (pip3) バージョン20.0以降、モジュールのインストールで、次の両方が成り立つ場合にはグローバルモジュールパスではなくローカルモジュールパス (実行ユーザのホームディレクトリ/.localディレクトリ下) にインストールされます (参考)。

  • グローバルモジュールパスへの実行ユーザによる書き込み権限がない。
  • ローカルモジュールパスのディレクトリが存在して実行ユーザによる書き込み権限がある。

一方、CGIとしてPythonスクリプトを実行する際には、通常、ライブラリをimportする際にグローバルモジュールパスにあるか探します。個々のユーザのローカルモジュールパスは探しません。

質問者さんの使ったpip (pip3) はバージョン23.2.1で、ユーザapple2cにはグローバルモジュールパスに書き込み権限がなく、同ユーザのローカルモジュールパスは存在していた模様です。このため、新たなモジュールをインストールしようとしてもローカルモジュールパスにインストールされてしまい、CGI実行時にimportに失敗していたと考えられます。

root権限でpip (pip3) を実行することでグローバルモジュールパスへインストールできます。

質問者さんがrootになれるのなら、次のようにします。

su pip3 install requests

または、質問者さんがsudoを使えるようになっている場合は、次のようにできます。

sudo pip3 install requests

ちなみに、グローバルモジュールパス以外の場所にインストールしたライブラリをCGIスクリプトでimportできるようにするには、次のような方法があります。

  • PYTHONPATHなどの環境変数を設定する (これにはHTTPサーバの設定変更が必要です)。
  • sys.pathグローバル変数を変更するようスクリプトに記述する。

、グローバルモジュールパスにインストールしたライブラリをimportするのには、特別な設定やコード記述は不要です。

※なお、質問文のコードではsys.pathを変更していますが、変更のしかたが正しくないので期待通りに動作しません。

投稿2023/07/26 03:01

編集2023/07/26 03:18
ikedas

総合スコア4441

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.30%

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

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

質問する

関連した質問