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

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

新規登録して質問してみよう
ただいま回答率
85.48%
Python 3.x

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

Q&A

解決済

3回答

5680閲覧

CGIサーバ上でライブラリを使おうとするとエラーが出る

Koz1

総合スコア10

Python 3.x

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

0グッド

0クリップ

投稿2018/03/20 07:08

ローカルのCGIサーバ上でライブラリを動かしたい

Pythonを使って、ブラウザ上でデータのやりとりをするため、ローカルでCGIサーバを起動して動かしています。formでのデータのやりとりは問題なくできているのですが、janomeライブラリをimportすると、エラーが出てしまいます。
パスの設定かな、とも思うのですが、コンソールで実行すると動くので、よく分からなくなってしまいました。

エラーメッセージ

cgi-bin/cgitest.py", line 5, in <module> import janome ImportError: No module named janome

該当のソースコード

Python

1#!/usr/bin/python 2# -*- coding: utf-8 -*- 3 4import cgi 5import janome 6 7print(""" 8<!DOCTYPE html> 9<html lan="ja"> 10<head> 11 <meta charset="utf-8"> 12 <meta http-equiv="Content-Script-Type" content="text/javascript"> 13 <title>Test</title> 14</head> 15<body> 16<h1>Test</h1> 17</body> 18</html> 19""")

試したこと

コンソールで実行すると、問題なく動きますが、ブラウザ上で実行するとエラーが出て、表示されません。

Python

1python cgitest.py 2 3<!DOCTYPE html> 4<html lan="ja"> 5<head> 6 <meta charset="utf-8"> 7 <meta http-equiv="Content-Script-Type" content="text/javascript"> 8 <title>Test</title> 9</head> 10<body> 11<h1>Test</h1> 12</body> 13</html>

いくつかの情報を見て、複数のPythonをインストールしたせいかな、とも思いました。以前に、Pythonをそのまま入れたり、Anacondaを入れたりしたので、それらも関係しているのかとも思いました。
ただ、その場合、どのように対処すればいいかが分からず、困ってしまいました。

パスの設定も確かめました。

python

1~/anaconda3/lib/python3.6/site-packages/janome

Python

1['', '~/anaconda3/lib/python36.zip', '~/anaconda3/lib/python3.6', '~/anaconda3/lib/python3.6/lib-dynload', '~/anaconda3/lib/python3.6/site-packages', '~/anaconda3/lib/python3.6/site-packages/aeosa']

よろしくお願いします。

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

Python 3.6.3 :: Anaconda, Inc.
ブラウザ:Chrome 65.0
OS: macOS Sierra 10.12

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

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

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

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

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

guest

回答3

0

#!/usr/bin/python

#!/usr/bin/env python
にすることでPATHを通してある(いつもpython main.pyで使っている)pythonインタプリタを使用できます。

この行の意味について
http://zashikiro.hateblo.jp/entry/2012/09/22/125953


今回は、
CGIサーバーを実行しているのがユーザー(いつも使っているアカウント)である、
もしくは、
他のユーザーにもanacondaのパスが通っている、
ためうまくいっています(?)。

linuxの本番環境の場合kaztoさんのおっしゃられているようにユーザーが別に用意されている(daemonなど)ことが多いので、bashrcなどではパスを通すことができず、想定外の事態が予測されます。
http://www.lesstep.jp/step_on_board/apache/346/

投稿2018/03/20 11:52

mkgrei

総合スコア8560

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

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

Koz1

2018/03/20 12:29

レンタルサーバーでも少しずつ試していますが、動いてはいます。だけど、今回のコードは試していないので、今後、少しずつ試してみようと思います。 どうもありがとうございました。
guest

0

ターミナルで実行しているユーザと、Webサーバを動かしているユーザ(wwwだったりhttpdだったりnobodyだったりします)が異なるため、
~/anaconda3/lib/python3.6/site-packages/janome を参照できていないのだと推測します。
pipのパッケージをシステムにインストールする必要があると思います。

投稿2018/03/20 07:30

kazto

総合スコア7196

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

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

Koz1

2018/03/20 07:52

ありがとうございます。 「システム」というのは「Webサーバ」という解釈でよろしいでしょうか?つまり、「Webサーバ上にpipパッケージをインストール」すればいいのでしょうか?調べたのですが、サーバ上にインストールをどのようにやればいいか分からず、再度の質問となります。 それとも、今の状態で再インストールをすればよろしいのでしょうか? 勉強不足ですみません。 一応、ターミナルで確認すると、以下のようになっているので、入っている気はします。 --- python -m pip -V pip 9.0.1 from ~/anaconda3/lib/python3.6/site-packages (python 3.6)
kazto

2018/03/20 08:04

> 「システム」というのは「Webサーバ」という解釈でよろしいでしょうか? 若干ニュアンスが違う気がします。ローカルでWebサーバを動かしているとのことですので、macであれば/usr/bin/pythonとかに元からPythonがインストールされていたりすると思います。(ただし2.7とかだった気がします) こちらのpythonが当該パッケージを使うことができないといけない、というのが今回の問題と認識しています。 anacondaでインストールしたpythonは、インストールした一般ユーザしか参照したり動かしたりすることができません。
Koz1

2018/03/20 08:59

ありがとうございます。 確かに、usr/bin/pythonで動かしていました。そうすると、このpythonが使えるように必要なパッケージをインストールすればいい、ということですね。 ただ、pip install janome とやると、anaconda3/lib/python3.6/site-packagesにインストールされてしまいました。 usr/bin/pythonが使えるようにインストールするにはどのようにすればいいのでしょうか?再度の質問ですみませんが、よろしくお願いします。
guest

0

自己解決

一応、以下のようなコードを追加することで、動くようにはなりました。
ただし、少し動きが遅い気がするので、もっと良い方法があるかもしれません。。あくまで「一応」です。。

Python

1import sys 2sys.path.append("/~/anaconda3/lib/python3.6/site-packages/")

(追記)
アドバイスをいただき、以下のように訂正しました。単純なソースは動くようになりました。

'#!/usr/bin/python'

'#!/usr/bin/env python'

と変更しました。

投稿2018/03/20 10:58

編集2018/03/20 12:27
Koz1

総合スコア10

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

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

mkgrei

2018/03/20 11:25

根本的な解決ではなく、結構よろしくないことをしています。 ご提示されている方法では速度に影響はありません。 ただ、python3.xのライブラリをpython2.xで走らせている気がします…
mkgrei

2018/03/20 11:26

ところで、 #!/usr/bin/python を #!/usr/bin/env python にしてみるのはいかがでしょう。
Koz1

2018/03/20 11:39

ありがとうございます。 そうですよね^^; 見たことがない書き方だったので、よくない気はしました。 #!/usr/bin/env pythonの方法で、動かすことができましたが、やろうとしていたことで、またエラーが出てしまいました。。 関連することかもしれませんが、また違うスレッドで質問したいと思います。なので、mkgreiさんの回答で、解決にしたいと思います。だけど、「自己解決」になってしまうので、mkgreiさんが改めてコメントを新規にいただけたら「ベストアンサー」にしたいと思いますので、よろしくお願いします。
mkgrei

2018/03/20 11:54

このような場合、解決法を回答に追記して「自己解決」にするとよいと思います。 簡易的なfixなので、弊害も考えられます。 ちょっと付け加えました。
Koz1

2018/03/20 12:25

了解しました。では、mkgreiさんの部分を引用させていただき、「自己解決」にしたいと思います。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問